Unity Rigidbody
Rigidbody(剛體)component:可將Rigidbody應用到你的遊戲物件(GameObject
)上,讓這個GameObject
可以被物理的方式控制,也將是說讓這個GameObject
可以被physics forces
(物理力,如推力,阻力等) 與 torque
(扭力)作用。
另外在2D遊戲中,則是使用Rigidbody2D component它只會做用在2D環境,也就是說只能在XY plane上作用。
參數簡介
- Body Type(Rigidbody2D)
- Dynamic(動態,預設值)
- 運動時受力影響,並且接受完全的物理模擬,包括重力、碰撞、施加力等,最耗效能。
- Kinematic(運動學)
- 不受力影響但可移動,其運動行爲是被我們開發者完全限定的,可以碰撞,沒有設定質量(Mass)的參數
- 只會與Dynamic2D碰撞
- Static(靜態)
- 不受力影響也不會動,會與動態類型剛體碰撞,最不消耗效能。
- Dynamic(動態,預設值)
- Mass:質量,預設為千克,質量越大慣性越大,質量越大越不容易被別的物體推動
- Drag:空氣阻力,根據移動物件時影響物件的空氣阻力大小,0表示沒有空氣阻力
- Angular Drag:根據樞紐旋轉物件時影響物件的空氣阻力大小,0表示沒有空氣阻力
- Use Gravity:是否受重力影響
- Is Kinematic:如果啟用此選項,則物件不會被物理引擎驅動,只能透過Transform對其進行操作,
- 對於移動平台,或者如果要動畫化附加了HingeJoint的剛體,此屬性非常有用
- Interpolate:插值運算,讓剛體物體移動更平滑
- None:不使用
- Interpolate:根據前一幀的變換來平滑變換
- Extrapolate:根據下一幀估計的變換來平滑變換
- Collision Detection:碰撞檢測,用於防止快速移動的物體其他物體而不檢測碰撞
- Discrete:預設值,離散檢測,
- 最不耗效能的檢測,
- 對場景中所有其他碰撞體使用離散碰撞檢測,
- 用於一般碰撞。
- 可能會出現當物體移動太快造成偵測不到與其他物體碰撞。
- Continuous:連續檢測,
- 對動態碰撞體(具有剛體),使用離散檢測
- 對靜態碰撞體(沒有剛體),使用連續檢測
- 對於所有其他剛體碰撞使用離散檢測
- 較消耗物理效能
- Continuous Dynamic:連續動態檢測
- 對動態碰撞體(具有剛體)與靜態碰撞體(沒有剛體)都使用連續碰撞檢測
- 對於所有其他剛體碰撞使用離散檢測
- 用於快速移動的物體
- Continuous Speculative:連續推測檢測
- 對剛體和碰撞體使用推測性連續碰撞檢測,
- 一般比Continuous Dynamic的成本低
- Discrete:預設值,離散檢測,
- Constraints:約束,對剛體運動的限制
- Freeze Position:有選擇地停止剛體沿世界X, Y, 和 Z軸的移動
- Freeze Rotation:有選擇地停止剛體圍繞局部X, Y, 和 Z軸的轉動
Collision Detection的效能消耗為Continuous Dynamic > Continuous Speculative > Continuous > Discrete
無剛體 | Discrete | Continuous | Continuous Dynamic | Continuous Speculative | |
---|---|---|---|---|---|
無剛體 | 不檢測碰撞 | Discrete | Continuous | Continuous | Continuous Speculative |
Discrete | Discrete | Discrete | Discrete | Discrete | Continuous Speculative |
Continuous | Continuous | Discrete | Discrete | Continuous | Continuous Speculative |
Continuous Dynamic | Continuous | Discrete | Continuous | Continuous | Continuous Speculative |
Continuous Speculative | Continuous Speculative | Continuous Speculative | Continuous Speculative | Continuous Speculative | Continuous Speculative |