切換
舊版
前往
大廳
主題

【獨立開發日記 #2.5】自製 假的 2D物理。 程式碼探討

%%鼠 拒收病婿 | 2020-07-05 17:59:58 | 巴幣 8 | 人氣 399

前言:
打完才發現我 "物理"的英文都拼成 physic ,正確的好像是Physics




(球會動是因為我有加自動移動的腳本,模擬怪物自動走路。有一段突然跳很高是這個AI腳本的錯)

之前在使用rigidbody2D的時候,一直看不太出來mass的功用,尤其是明明mass沒有很大,物件想跳的時候,AddForce()的值常常要給到好幾百才跳得起來。

為了想要有更好的控制,所以只好自己寫個偽rigidbody2D,注意這腳本並非完全參考物理公式,到後面有很大一部分只做到有效果而已(我物理爛,可以的話還麻煩各位提供公式修正了)...

有個問題是Unity 的 OnCollision__方法必須有一方有rigidbody2D才會被呼叫,所以我也得自製個用來觸發碰撞事件的腳本。

題外話:
最近想把一些自製的特定功能腳本放上去,做成一個屬於我的lib  ((浪漫

裡面有2個腳本,一個是My2Dphysic.csMy2Dcollider.cs
My2Dphysic.cs負責模擬重力、不要穿牆等功能,和Unity的Rigidbody2D類似。
如果要和其他物件碰撞、推開物件...,可以掛上My2Dcollider.cs。

看程式碼會發現My2Dcollider.cs其實只負責發出碰撞的event,碰撞造成的推力計算等等還是由My2Dphysic.cs負責。
(要注意的是,如果物件mass太大,它給予所撞擊物件的推力越大,太大可能會直接撞飛,不知道算不算Bug)


使用My2Dphysic 首先要準備2個Layer,分別表示地板和牆壁。
若想要操作物件水平移動,可以這樣打:
* rigid = gameObject.GetComponent<My2Dphysic>();
private void Update(){
  rigid.velocity.x = Input.GetAxis("Horizontal") * your_speed;
}

若想要跳躍,可以這樣打:
if (Input.GetKeyDown(KeyCode.Space) && rigid.isGrounded)   {        
rigid.AddForce(Vector2.up * your_jumpForce);
  }
使用方法跟Unity的rigidbody2D很像,只是有其他可操作的參數,例如斜坡滾動的旋轉速度angular_acceleration、彈跳力(force drag越小彈跳越高)...。

基本註解我都有寫在腳本裡,應該不難看懂那些變數的作用。


目前還在修修改改階段,Bug可能還是一堆,尤其是速度造成穿牆...,有甚麼修正我會再放上去。
程式碼有什麼問題也麻煩各位指教了

送禮物贊助創作者 !
0
留言

創作回應

樂小呈
恭喜~

ㄅ過我的相撞是指,碰撞檢測本身
物體速度過快的話得把軌跡畫出來才知道有沒有相撞

你可以試試把兩個物體加到超高速,讓他們對撞
看看撞不撞的到 [e19]
2020-07-05 22:23:01
樂小呈
不對,對撞不好,用90度撞比較能看出問題[e19]
2020-07-05 22:34:28
%%鼠 拒收病婿
劃出軌跡,聽起來不錯耶![e17]
要達成這個的話,我的想法是建個"physics manager"之類的腳本專門監聽場上所有My2Dphysic物件,用他們的force+velocity取得移動方向,畫出軌跡,再處理所有交叉的(?[e15]
不過既然是超高速,且一次update內移動的距離大於兩個物件間的距離,這樣是不是就跟時空列車一樣能突破次元,碰不到對方呀... ((腦袋炸掉
2020-07-05 23:03:11
樂小呈

就是會直接穿過去,原本的rigidbody可以設置去防
但自己的腳本就得自己算了[e8]

而且也蠻耗效能的樣子[e8][e8]
2020-07-05 23:11:24
樂小呈
開始研究物理了,借我參考一下[e7]

然後物理的計算建議要在FixedUpdate中會比較穩定歐[e19]
2020-08-16 14:14:12
%%鼠 拒收病婿
加油(。・ω・。)ノ
我的程式碼都玩假的,希望你能找到有用的東西。

原本也是想放在Fixedupdate,不過這發生高速穿透的機率比較大。在設定把Fixedupdate的間距調短也許會好轉。
2020-08-16 14:21:15
無害的路人(迷惘狀態)
連結點進去看不到了......
2023-01-20 11:22:27
%%鼠 拒收病婿
換位置了
https://github.com/Lontoone/MyUnityToolLab/tree/master/Old
2023-01-23 18:15:39
追蹤 創作集

作者相關創作

更多創作