主題

亂七八糟的_遊戲開發誌[2] 移動實現

Daily | 2019-01-31 00:32:58 | 巴幣 6 | 人氣 672

本文是序自上一篇  點我
如果還沒有看過的話建議你看過了再來看這篇

現在就來詳細解說腳色移動吧
先把我們的腳色加上RigidBody和collider
這兩樣是Unity進行物理模擬必不可少的component
其中RigidBody 可以讓腳色被物理引擎改變座標與旋轉
而collider就是腳色得碰撞框 這邊建議用capsule(膠囊)形狀的碰狀框
capsule在模擬的效能與效果算是比較平衡的選擇
至於collider的尺寸怎麼調?
我的經驗是假如你的腳色190公分高度就設1.9
然後Y偏移就是身高的一半 0.95 寬度就與肩同寬就好


順便給大家我自己做的比例尺貼圖(1024*1024)直接貼到unity預設的方塊上就好
點我(imgur)

RigidBody 要做的設定就比較簡單了
只要把Constraints 裡面的FreezeRotation的XYZ都打勾就好
這個FreezeRotation得意思是在物理模擬中不模擬RotationXYZ
如果沒有打勾你的腳色可能會被撞倒(滿好笑的可以自己試試看WWWWWW)

設定好之後呢就要開始寫程式了
這邊我不會把程式碼都貼上來一方面可能很多人看不懂一方面版面會很亂
我還是以概念為主 如果有很多人都想看的話我再弄一個更詳細的教學

這邊會牽扯到一個也是遊戲製作的關鍵 "按鍵輸入"
因為按鍵輸入也是一個博大精深的話題我在這邊就先不展開了
請各位就先用 if (Input.GetKey(KeyCode.W))
來判定移動

可以利用RigidBody中提供的AddForce來推動腳色移動
但這邊會碰上一個問題 因為在unity中Update是每個帧執行的
這樣會造成加速度會無限增加下去 你會看到腳色直接飛出整個世界


那該怎麼辦呢?
接下來就是DailyController中的關鍵了
正常的物理中在地球上因為有大氣
所以不管任何物體加速時會受到阻力而慢慢的到達一個穩定的速度
現在我們就來模擬這個穩定的速度
在AddForce後面用if判斷rigidbody的velocity的sqrMagnitude是否超過我們的限速平方
如果超過了就讓velocity=速限*移動向量
這樣就不會無限加速了


好了接下來就把程式碼包裝成一個Move函數
參數就設定成移動方向vector3
要注意AddForce要多乘上加速度值
剩下的就給大家完成瞜

下一篇會講其他移動細節
送禮物贊助創作者 !
0
留言
TOP
開啟 APP

巴哈姆特 APP
最舒適便利的瀏覽體驗

開啟巴哈姆特 APP