因為畢製打算做一款純2D的遊戲,但又想要在2D的畫面下加入更豐富的物理,於是我開始了製作虛擬y軸之路。
製作概念:
針對場景中所有平台設TriggerCollider,並且設一個虛擬高度參數,然後再利用RayCast去偵測角色所站地面的虛擬高度,將角色速度分為平面的xz軸和y軸,y軸速度透過高度比例換算並和xz軸速度相加後再給rigidbody,當角色有跳躍或是引力向下的y軸速度時,利用此速度反推移動量,在調整角色站的地面位置,這樣就能夠準確知道角色目前的虛擬高度和位移。
實際效果:
平台高度差
平台跳躍
不同角度平台高度差
斜坡高度差修正
值得注意的是場景中會有非單一高度的平台,如斜坡、或者凹凸不平的起伏地面,為此我設計的一個能夠針對凸多邊形頂點設定高度的程式,只要針對凸多邊形的頂點設定高度,程式會自己運算出圖形中間任一點高度(如下圖)。
雖然目前只用到很簡單只有2種頂點高度的斜坡,但這套運算方式基本上只要是凸多邊形都能準確計算。
運算的步驟:
1.先找出任意頂點經過目標位置到圖形邊的線段
2.取得圖形邊的點後可利用此邊上的兩個頂點換算此點的高度
3.再利用此點和頂點去換算這條線段上目標位置的高度
4.對每個頂點重複1~3步驟後將結果相加並且除以頂點數
這樣就能得知被每個頂點高度影響後的目標位置的高度了(此步驟只能用在凸多邊形)
實機DEMO:
之後會再陸續增加其他物理功能(如推、拋、丟、彈跳、摩擦力等等)。