unity2D物理引擎之-Rigidbody 2D


雖然Rigidbody 2D大致上可以看成是Rigidbody的2D化,大部分功能也是一致的,但是還是有一些細節問題。

 

一些事項:

1.任何添加到同一個 GameObject身上或者其子物體身上的 2D Collider組件都隱式的 附屬於 那個 Rigidbody 2D.

2.當一個Collider 2D組件附屬到一個Rigidbody 2D身上時,它就跟隨Rigidbody 2D移動。這時不應該通過直接設置Transform 或者 Collider的偏移量來 移動。

3.附屬於同一個 Rigidbody 2D的所有 Collider 2D,它們相互是不會發生碰撞檢測的。

 

剛體類型:

1. Rigidbody 2D 有三個類型:Dynamic、Kinematic、Static

2. 剛體類型主要影響一下幾個要素:

  a. 移動行為(位置、旋轉)

  b. 碰撞體交互

3. 注意一點,雖然Rigidbody 經常被描述成 是與其它 rigidbody 相互碰撞,但是實際上是 附加在Rigidbody上的Collider在進行碰撞檢測,Rigidbody在沒有Collider的情況下,是沒法相互碰撞的。

4. 改變Rigidbody 2D的類型是一個比較麻煩的事情。當一個剛體類型改變,許多關聯的變量會立馬重置,並且需要重新賦值,而且與剛體關聯的所有Collider需要在下一個FixiedUpdate之前重新認知,這樣可能會導致奇怪的表現。

 

剛體類型: Dynamic

概括來說,這種類型是為了 物理仿真運動而設計的。(讓物體看起來更像現實世界行為)它的運動受重力、質量、其他力影響。並且這種類型會與其他所有剛體類型發生碰撞

  • Simulated:該組件是否與仿真模擬交互。
  • Collision Detection:碰撞體之間的碰撞檢測方式:
    • Discrete:在一個 物理更新期間,物理可以相互重疊、穿越。當速度太快時,碰撞只會在最新的位置檢測,這就意味着,如果速度太快,使用這個選項會有問題。
    • Continuous:這個就不會存在Discete的問題,但是CPU消耗高。
  • Sleeping Model:在什么情況下,會休眠以節省性能。
    • Never Sleep:從不休眠
    • Start Awake:物體最初是醒着的
    • Start Asleep:物體最初是休眠的,但是遇到碰撞就會蘇醒。
  • Interpolate:在物理更新中,物體移動的插值算法
    • None:
    • Interpolate:基於上一幀物體位置來插值模擬
    • Extrapolate:基於預測下一陣物體位置來插值模擬

剛體類型:Kinematic

這種類型,物體移動也是在仿真下進行的,但是卻是在 用戶非常明確的控制 的前提下進行的。

 

注意

  1. 這種類型不受力、重力的影響

  2. 它使用Rigidbody2D.MovePosition or Rigidbody2D.MoveRotation API來移動。

  3. 它使用物理引擎來查詢 碰撞,並且通過編程來決定物體如何移動。

  4. 實際上,這種類型仍然通過它的速度來移動,但是它的速度卻不受其他任何力的影響。

  5. 這種類型 不會 與其它Kinematic或者Static類型發生碰撞檢測

  6. 在碰撞過程中,這種類型的物體表現為不受力(質量無窮大)。

 

  • Simulated:如果想要在運行時 與其它Collider 2D 發生物理仿真交互,就打開它。
  • Use Full Kinematic Constacts:開啟它,該物體就可以與其它任意類型的Rigidbody 2D發生碰撞。

剛體類型:Static

1. 它只與 Dynamic 類型的Rigidbody 發生碰撞.

2. 無法擁有兩個 Static 的Rigidbody 2D。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM