要用內建的物理模擬功能嗎?
https://www.assetstore.unity3d.com/en/#!/content/11228
首先,在實做前可以先把上面的範例找來試試,
其中有不少可以參考的地方,例如攝影機或捲動的背景等等。
至於角色移動,也可以參考範例中的方式,使用內建的物理模擬方式,
調整參數達到操作角色進行移動,跳躍等行為。
但這可能會有幾個狀況需要考慮:
1. 必須要很了解內建物理模擬功能的參數影響,才能調整出接近自己想要的效果。
2. 有些非現實的移動方式,要靠內建物理模擬來實現的話,可能需要使用比較間接的方式。
上面並不是說內建物理模擬不好,而是適不適合的問題,
想像一下,假如我們要做像小精靈一樣的遊戲,
我們也不需要用到物理模擬,只需要適當的碰撞偵測即可。
若我們需要的操作不複雜,只要加上適當碰撞偵測後,
移動行為就只是對物件做單純xy座標計算,
這樣就不用太花時間了解內建物理模擬的方式,
也可以準確做出自己想要的移動行為。
反之,假如熟悉內建物理模擬功能,很清楚要怎樣調整才能達成自己需求,
那也不需要重造車輪,直接用內建的功能吧。
再重申一次,不是好壞的問題,而是適不適合的問題。
以下的說明是不使用內建物理模擬的狀況。
那什麼是適當的碰撞偵測?
當然還是看需求而定,就我所使用到的例子來說可以參考上圖,
當預期角色朝特定方向移動時,便將此方向拆分成水平與垂直分量,
各自打出射線去偵測是否打到其他碰撞體。
幾個打出射線需要注意的點:
1.射線長度跟每個frame想移動的距離有關
射線長度並不需要太長,因為其實我們想知道的是下個frame會不會碰到東西,
所以射線長度應該跟每個frame角色會移動多長的距離有關。
2. 射線的間隔依實際需求決定
每個分量需要打多少射線?還是依照狀況而定。
像上圖,假如射線剛好沒有打凸出來的地方,角色便會認為凸出來的地方可以走進去。但也不是射線打越密越好,理由下述。
3. 射出射線這件事每個frame都得做
上列發出射線的行為是每個frame都在做的事,所以假如場景上有很多角色,每個角色在每個frame都打出很多射線,某種程度來說對效能會造成負擔。
所以射線的數量與長度還是需要根據需求來做調整。
那上面的內容是否還得自己寫程式碼實現呢?
https://github.com/prime31/CharacterController2D
上面剛好有別人寫好的功能可以直接套用,
裡面也有範例,有興趣就抓來試試吧,
甚至修改一些功能(例如把boxcollider改成其他的collider或組合起來的collider群組)。
使用上述連結功能,加上一些國中物理來做座標計算,
就可以實現很基本的2D橫向捲軸操作了。
沒有留言:
張貼留言