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

看板GameDesign (遊戲設計)作者 (香烤秋刀魚)時間6年前 (2018/11/18 19:45), 6年前編輯推噓14(14036)
留言50則, 7人參與, 6年前最新討論串1/1
大家好 小弟正在使用Unity上進行2D動作遊戲開發 目前在角色的移動 跳躍之類的動作 都是透過計算速度並在update的時候更新 可是許多技能都帶有位移的效果 這些位移通常與物理系統並不相關 而且位置的變化需要與動畫保持一致 想請問這類型的移動是透過什麼方式去處理? 舉個例子: 像是昇龍拳 在使用的時候角色會向右上方 沿著類似指數函數的路徑移動 在這段時間所有移動都是固定的 並且與物理無關 技能結束後的下墜才會回到物理系統計算 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.122.77 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1542541506.A.B02.html

11/18 20:53, 6年前 , 1F
不確定是不是常用的方法,不過我會用另一個 Game Object
11/18 20:53, 1F

11/18 20:53, 6年前 , 2F
當作玩家真正的位置,然後角色動畫只是一個跟著玩家位置
11/18 20:53, 2F

11/18 20:53, 6年前 , 3F
跑的另一個 Game Object
11/18 20:53, 3F
不太能理解你的做法是要達到什麼效果... 一般在gameobject上放動畫不就是這樣了嗎? ※ 編輯: RoastSaury (101.8.214.130), 11/18/2018 21:40:21

11/18 23:34, 6年前 , 4F
不同狀態下有個負責更新速度和位置的virtual function
11/18 23:34, 4F

11/18 23:34, 6年前 , 5F
(或用switch或其他方法達到等同效果),一般狀態下用速
11/18 23:34, 5F

11/18 23:34, 6年前 , 6F
度更新位置,特殊狀態可以直接更新位置或對速度做客製
11/18 23:34, 6F

11/18 23:34, 6年前 , 7F
化更新。另外,除非主打物理模擬且模擬浮動性可接受,
11/18 23:34, 7F

11/18 23:34, 6年前 , 8F
負責不建議用泛用型物理引擎處理動作遊戲的核心機制,
11/18 23:34, 8F

11/18 23:34, 6年前 , 9F
建議用客製特化碰撞偵測
11/18 23:34, 9F

11/18 23:35, 6年前 , 10F
不同狀態中也可以做短時間animation blend,消除不想要
11/18 23:35, 10F

11/18 23:35, 6年前 , 11F
的視覺不連續性
11/18 23:35, 11F

11/19 00:23, 6年前 , 12F
等等,我也不知道我剛剛理解成什麼了 XD 如果是平地結構
11/19 00:23, 12F

11/19 00:23, 6年前 , 13F
的話直接把下落動畫也一起做完,如果有著陸高度問題的
11/19 00:23, 13F

11/19 00:23, 6年前 , 14F
話你直接寫個加速度公式把人往下移,然後偵測跟地面的碰
11/19 00:23, 14F

11/19 00:23, 6年前 , 15F
撞就好了。物理引擎帶來的結果不好預期
11/19 00:23, 15F
看來我問題問的不夠好XD 我目前是自己使用物理公式以及客製碰撞 角色基本的移動 跳躍 以及對碰撞處理都OK了 Cj大的做法的話 和我預期的蠻接近的 只是若是要直接更新位置 勢必要紀錄每個時間點角色應該出現的座標 感覺會 很麻煩(吧) 客製速度也考慮過 但感覺位置不太容易受控制 於是才上來詢問有沒有更輕鬆一點的解法 另外 想請問最簡潔地取得當前animation的frame的方式是? 還是真的只能用animator.GetCurrentAnimatorStateInfo(0).normalizedTime? 這東西真的有夠醜的啦 ※ 編輯: RoastSaury (140.113.122.77), 11/19/2018 00:51:37

11/19 02:50, 6年前 , 16F
自己寫一個 extension function啊y
11/19 02:50, 16F

11/19 02:51, 6年前 , 17F
public static float NormalizedTime(this Animator ani)
11/19 02:51, 17F
這樣也只是包起來而已吧? ※ 編輯: RoastSaury (140.113.122.75), 11/19/2018 04:24:15

11/19 07:37, 6年前 , 18F
是包成比較好看的API沒錯啊,除非能更動Unity底層的ani
11/19 07:37, 18F

11/19 07:37, 6年前 , 19F
m資料儲存模式,那就只能靠重新包裝
11/19 07:37, 19F

11/19 07:40, 6年前 , 20F
另外,勢必要紀錄角色位置的意思是?不論是數學式可以
11/19 07:40, 20F

11/19 07:40, 6年前 , 21F
表的動態或對anim取樣,最少都只需要開始時間吧
11/19 07:40, 21F

11/19 07:45, 6年前 , 22F
還有開始位置
11/19 07:45, 22F

11/19 07:52, 6年前 , 23F
紀錄的意思是說製作客製取樣點函式嗎?那實質上應該可
11/19 07:52, 23F

11/19 07:52, 6年前 , 24F
以用播放特定anim來實作,這個特殊狀態就是一個特定ani
11/19 07:52, 24F

11/19 07:52, 6年前 , 25F
m state這樣
11/19 07:52, 25F
嗯我就是取樣的意思 我想到的另一個問題是 如果是類似這種取樣的方式去位移 移動時與地圖物件的互動可能會很差 (因為移動都寫死了)

11/19 08:01, 6年前 , 26F
回頭一下,取frame的方式之所以是那樣,是因為Unity的
11/19 08:01, 26F

11/19 08:01, 6年前 , 27F
動畫系統是使用層式狀態機模型,用層式模型是為了支援a
11/19 08:01, 27F

11/19 08:01, 6年前 , 28F
nim blending,為達到圓滑anim的必備模型,而用狀態機
11/19 08:01, 28F

11/19 08:01, 6年前 , 29F
則是泛用anim系統的常見選擇,我認為還算合理啦
11/19 08:01, 29F

11/19 08:36, 6年前 , 30F
tween之類的東西?
11/19 08:36, 30F

11/19 08:56, 6年前 , 31F
推樓上,特殊狀態下也可用tween,如果是客製移動曲線,
11/19 08:56, 31F

11/19 08:56, 6年前 , 32F
也可override個客製tween
11/19 08:56, 32F
Tween我還真的沒用過 來研究一下好了 ※ 編輯: RoastSaury (140.113.136.220), 11/19/2018 10:33:25

11/19 12:27, 6年前 , 33F
會上面的推文回文,取樣其實不代表寫死位移,可以寫成
11/19 12:27, 33F

11/19 12:27, 6年前 , 34F
每次取樣時取相對位移來更新位置,同時對環境做互動
11/19 12:27, 34F
我的認知是 因為移動不再是透過速度去更新 在遇到障礙物的時候很難透過改變位移量 去表現出「受到阻擋」的狀態 因為已經沒有移動的函數了 ※ 編輯: RoastSaury (101.9.160.213), 11/19/2018 15:03:25

11/19 15:27, 6年前 , 35F
應該還是可行。如果障礙是剛體,那可以試試移除障礙接
11/19 15:27, 35F

11/19 15:27, 6年前 , 36F
觸面法線方向的移動分量,然後依據要保留多少慣性而縮
11/19 15:27, 36F

11/19 15:27, 6年前 , 37F
放接觸面切面分量,該比例也可以隨時間做圓滑處理,看
11/19 15:27, 37F

11/19 15:27, 6年前 , 38F
起來就不會突兀。如果是軟性障礙,那可以嘗試對位移量
11/19 15:27, 38F

11/19 15:28, 6年前 , 39F
做縮放,加上對碰撞面法線方向稍作偏移,製造出排斥力
11/19 15:28, 39F

11/19 15:28, 6年前 , 40F
的感覺。真要從速度下手,剛體障礙則用上述位移更新方
11/19 15:28, 40F

11/19 15:28, 6年前 , 41F
式去反推,軟體障礙就隨意囉
11/19 15:28, 41F

11/19 15:32, 6年前 , 42F
我有做過類似的效果,我覺得看起來還行。要點是其中會
11/19 15:32, 42F

11/19 15:32, 6年前 , 43F
牽扯到的比例參數,用了本身已是C1圓滑度的數值彈簧做
11/19 15:32, 43F

11/19 15:32, 6年前 , 44F
圓滑處理,就感覺蠻順暢的
11/19 15:32, 44F

11/19 23:08, 6年前 , 45F
沒有什麼問題是中介層解決不了的,如果有,就再包一層
11/19 23:08, 45F
聽不太懂XD 先謝謝各位的回答 我目前先嘗試在不同時間點切換初速跟加速度看看 如果有問題再跟各位大大請教 謝謝~ ※ 編輯: RoastSaury (101.13.82.147), 11/20/2018 14:50:03

11/21 21:54, 6年前 , 46F
推烤魚
11/21 21:54, 46F

11/21 21:58, 6年前 , 47F
是烤魚
11/21 21:58, 47F

11/26 01:20, 6年前 , 48F
寫一個StateMachineBehaviour,用normalizedTimed控制時間
11/26 01:20, 48F

11/26 01:22, 6年前 , 49F
這樣就很好對應動畫 至於移動方式很多種,不喜歡velocity
11/26 01:22, 49F

11/26 01:22, 6年前 , 50F
就直接修改animator.transform.position
11/26 01:22, 50F
文章代碼(AID): #1RyL32i2 (GameDesign)
文章代碼(AID): #1RyL32i2 (GameDesign)