[程式] Unity中技能伴隨著的位移設計

作者: RoastSaury (香烤秋刀魚)   2018-11-18 19:45:03
大家好
小弟正在使用Unity上進行2D動作遊戲開發
目前在角色的移動 跳躍之類的動作
都是透過計算速度並在update的時候更新
可是許多技能都帶有位移的效果
這些位移通常與物理系統並不相關
而且位置的變化需要與動畫保持一致
想請問這類型的移動是透過什麼方式去處理?
舉個例子:
像是昇龍拳
在使用的時候角色會向右上方
沿著類似指數函數的路徑移動
在這段時間所有移動都是固定的 並且與物理無關
技能結束後的下墜才會回到物理系統計算
作者: dklassic (DK)   2018-11-18 20:53:00
不確定是不是常用的方法,不過我會用另一個 Game Object當作玩家真正的位置,然後角色動畫只是一個跟著玩家位置跑的另一個 Game Object
作者: cjcat2266 (CJ Cat)   2018-11-18 23:34:00
不同狀態下有個負責更新速度和位置的virtual function(或用switch或其他方法達到等同效果),一般狀態下用速度更新位置,特殊狀態可以直接更新位置或對速度做客製化更新。另外,除非主打物理模擬且模擬浮動性可接受,負責不建議用泛用型物理引擎處理動作遊戲的核心機制,建議用客製特化碰撞偵測不同狀態中也可以做短時間animation blend,消除不想要的視覺不連續性
作者: dklassic (DK)   2018-11-19 00:23:00
等等,我也不知道我剛剛理解成什麼了 XD 如果是平地結構的話直接把下落動畫也一起做完,如果有著陸高度問題的話你直接寫個加速度公式把人往下移,然後偵測跟地面的碰撞就好了。物理引擎帶來的結果不好預期
作者: wix3000 (癢,好吃)   2018-11-19 02:50:00
自己寫一個 extension function啊ypublic static float NormalizedTime(this Animator ani)
作者: cjcat2266 (CJ Cat)   2018-11-19 07:37:00
是包成比較好看的API沒錯啊,除非能更動Unity底層的anim資料儲存模式,那就只能靠重新包裝另外,勢必要紀錄角色位置的意思是?不論是數學式可以表的動態或對anim取樣,最少都只需要開始時間吧還有開始位置紀錄的意思是說製作客製取樣點函式嗎?那實質上應該可以用播放特定anim來實作,這個特殊狀態就是一個特定anim state這樣回頭一下,取frame的方式之所以是那樣,是因為Unity的動畫系統是使用層式狀態機模型,用層式模型是為了支援anim blending,為達到圓滑anim的必備模型,而用狀態機則是泛用anim系統的常見選擇,我認為還算合理啦
作者: juicefish (果汁魚)   2018-11-19 08:36:00
tween之類的東西?
作者: cjcat2266 (CJ Cat)   2018-11-19 08:56:00
推樓上,特殊狀態下也可用tween,如果是客製移動曲線,也可override個客製tween
作者: wix3000 (癢,好吃)   2018-11-19 23:08:00
沒有什麼問題是中介層解決不了的,如果有,就再包一層
作者: NCTU87 (八七)   2018-11-21 21:54:00
推烤魚
作者: j60708123 (Jokemouth)   2018-11-21 21:58:00
是烤魚
作者: QQron (Run)   2018-11-26 01:20:00
寫一個StateMachineBehaviour,用normalizedTimed控制時間這樣就很好對應動畫 至於移動方式很多種,不喜歡velocity就直接修改animator.transform.position

Links booklink

Contact Us: admin [ a t ] ucptt.com