ETH官方钱包

切換
舊版
前往
大廳
主題

【獨立開發日記:我回來啦】做個仿rigidbody2D 物理腳本#1

%%鼠 拒收病婿 | 2020-06-23 21:28:56 | 巴幣 34 | 人氣 491

心得:自從之前封一學期後,我終於回來了

因為unity rigidbody 2D數值怎麼調都不是我想要的,更奇怪的是用addForce做跳躍的話,常常要給很大的值才會跳起來。所以想自幹個仿2D rigidbody的物理腳本。

總之,展示一下目前做的效果:
有重力加速度,且碰到地板會依照數值(Force Drag)去展現回彈的效果。 (球會動是因為我在操作,但跟基本遊戲控制一樣上下左右+跳,其他仿物理效果是腳本在做的)
(6/21)



接下來是斜坡處理,會依照地板的斜度、摩擦力與自己的摩擦力去做旋轉與加速度。(人物不會選轉是因為有freeze rotation z 跟unity 的rigidbody一樣,球整顆白的也看不出旋轉效果)
(6/23)


接下來要做仿物體碰撞效果

(變數acceleration不會動是因為我不知道要怎麼用這個數值,其他的要碼效果像就好,要碼是用簡單國中公式推出來的 (沒讀高中....))

希望用這個腳本就可以取代collider 2D 和 rigidbody 2D(至少目前是這樣,但地板還是一定要有collider),不過運算成本我就還沒認真去比較了。

程式碼的話,我想做完個段落再丟上來,但基本概念就是:
先自動在物件腳底(抓sprite中心) 產生一個用來標記的空物件,以那個點為準去判斷有沒有碰到地面,以及有沒有陷入地面(如果地面不是平的,人物會走"進"斜坡中)。

沒碰到地面就以delta time為單位去做加速度。 v=at ,a=重力、t=delta時間。 delta我不知道中文該怎麼講,但就是微積分的概念(x。

陷入地面的話,就用個看不出來的數值去把人物拉上來。

斜坡的話:
用Ray往腳下射,取得地面的normal,再取得與(0,1)的角度差;如果地板collider是方形的話,算出來的角度會等於物件的z軸旋轉角度。 但地板若是多邊形,就得用算的了。

至於越斜滾越快的乘數,我是去Cross ((0,1),地板法線)。
cross的結果簡單來說,A向量與B向量中間的夾角越垂直,值越大,介於(-1~1)之間。
(我數學爛,數學系的拜託鞭小力點)



以上。


以下是這段時間畫的半成品爽圖:






建模練習:

(轉2D)





根本沒休息到但我還是很快樂


然後我好幾個月前做的遊戲贏了UCLA大學的Game jam

我回來啦!! 謝謝大家
送禮物贊助創作者 !
0
留言
追蹤 創作集

作者相關創作

更多創作