1. 程式人生 > >Unity-Rigidbody【剛體】元件-Rigidbody.AddForce的ForceMode 力的模式

Unity-Rigidbody【剛體】元件-Rigidbody.AddForce的ForceMode 力的模式

ForceMode 力的模式

在unity中,Rigidbody.AddForce()實現對剛體物體施加力的效果,實現物體例如碰撞,爆炸等等效果
呼叫函式如下:

public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force);

AddForce()函式有一個引數 ForceMode , 為列舉型別
Unity2017 API手冊 力模式

  • Force 新增一個可持續力到剛體,使用它的質量
  • Acceleration 新增一個可持續加速度到剛體,忽略它的質量。
  • Impulse 新增一個瞬間衝擊力到剛體 ,使用它的質量。( 爆炸或碰撞力量 )
  • VelocityChange 新增一個瞬間速度變化給剛體,忽略它的質量。

具體介紹如下:

在以下舉例中均設剛體質量為m=2.0f,力向量為f=(10.0f,0.0f,0.0f)。

1 . ForceMode.Force:預設方式,使用剛體的質量計算,時間間隔以系統幀頻間隔計算(預設值為0.02s)。

則由動量定理 f • t = m • v
可得:10 * 0.02 = 2.0 * v1,從而可得 v1=0.1 m/s,即每秒剛體在X軸上值增加0.1米

2 . ForceMode.Acceleration:忽略剛體的實際質量而採用預設值m = 1.0f,時間間隔以系統幀頻間隔計算(預設值為0.02s)

f • t = 1.0 • v
可得:10 * 0.02 = 1.0 * v2,從而可得 v2=0.2 m/s,即每秒剛體在X軸上值增加0.2米

3 . ForceMode.Impulse:採用瞬間力作用方式,即預設 t = 1.0f,不再採用系統的幀頻間隔

f • 1.0 = m • v
可得:10 * 1.0 = 2.0 * v3,從而可得 v3=5.0 m/s,即每秒剛體在X軸上值增加5.0米

4 . ForceMode.VelocityChange:忽略剛體的實際質量,採用預設值m = 1.0f,同時也忽略系統的實際幀頻間隔,採用預設間隔 t = 1.0f

f • 1.0 = 1.0 • v


可得:10 * 1.0 = 1.0 * v4,從而可得 v4=10.0 m/s,即每秒剛體在X軸上值增加10.0米