簡介
物理引擎就是在游戲中模擬真實的物理效果,比如,場景中有兩個立方體對象,一個在空中,一個在地面上,在空中的立方體開始自由下落,然后與地面上的立方體對象發生碰撞,而物理引擎就是用來模擬真實碰撞的效果。
如果需要讓模型感應物理引擎的效果,需要將剛體組件或角色控制器組件添加至該對象中。
剛體(Rigidbody)
剛體是一個非常重要的組件,新創建的物體默認情況下是不具有物理效果的,而剛體組件可以給物體添加一些常見的物理屬性,比如物體質量、摩擦力和碰撞參數等,這些屬性可用來真實的模擬該物體在3D游戲世界中的一切行為。
下面我們在unity中創建一個plane(平面),兩個cube(立方體),
藍色cube默認狀態是沒有rigidbody,
給紅色cube添加剛體組件,選擇要添加剛體的對象,
通過 “Component—>Physics—>Rigidbody”或者在Inspector窗口,選擇“AddComponent—>Physics—>Rigidbody ”

運行后可以發現,添加了剛體的紅色cube感應到了物理效應,會從空中落下。而藍色cube依然是靜止不動的

可以看到Inspector可以看到Rigidbody包含的屬性,簡單的看下幾個屬性的含義,詳細的可以看手冊

力
力是物理學中一個非常重要的元素,其種類有很多,剛體組件可以受力的作用,
比如給剛體施加一個X軸方向的力,那么該剛體綁定的物體將沿X軸方向向前移動,
這就好比用力將物體仍出去一樣,該物體會以拋物線的形式移動,而不是呆板的做勻速平移 。
力的方式有兩種
1:普通力,通過設定里的方向和大小,相當於把力施加在物體的重心上。
2:位置力,需要設定目標點的位置,該物體就朝向這個目標位置施加力。
AddForce和AddForceAtPosition
還是拿之前的那個列子做演示。在Hierarchy視圖中創建兩個Sphere,紅色的添加普通力,白色的添加位置力
紅色Cube當作位置力的目標對象。即向該位置發射一個位置力
1:創建腳本。定義三個變量:
1 public GameObject whiteSph; //白色球體 施加普通力的對象 2 public GameObject redSph; //紅色球體 施加目標位置力的對象 3 public GameObject targetPos;//目標對象
2:GUI繪制兩個Button,分別控制“普通力”和“位置力”邏輯代碼
1 void OnGUI() 2 { 3 if (GUILayout.Button("普通力")) 4 { 5 redSph.rigidbody.AddForce(0,1000,0); //Y軸上力的大小為1000。即向上 6 } 7 if (GUILayout.Button("位置力")) 8 { 9 //算出whiteSph到targetPos的目標向量 10 Vector3 c = targetPos.transform.position - whiteSph.transform.position; 11 12 //在c位置施加一個位置力,targetPos將會向這個位置移動 13 whiteSph.rigidbody.AddForceAtPosition(c, targetPos.transform.position, ForceMode.Impulse); 14 } 15 }
3:腳本掛載到Camera上。給變量拖拽賦值。運行看效果.

運行游戲,剛體會受物理效應會往下落
1:當單擊普通力。紅色球體會往天空彈起,因為它有剛體。最終還是外往下落。
2:當單擊位置力。白色球體會朝着紅色方塊位置添加力。最終移動到這個位置。
3:當改變紅色cube坐標后。目標位置也跟着移動。
說了這么多。那AddForce和AddForceAtPosition到底有什么區別呢?我也是跟着學。跟着看手冊,
也許只有等以后知道了它運用在什么邏輯代碼中。就自然而然了解了。
手冊上的解釋:
1: 添加一個力到剛體。作為結果剛體將開始移動。
2:在position位置應用force力。作為結果這個將在這個物體上應用一個力矩和力。
力矩?是什么。這個我也犯迷糊。不過在手冊手看到這樣一個函數
AddTorque:添加一個力矩到剛體。作為結果剛體將繞着torque軸旋轉。
手冊上函數有很多。有興趣的可以自己去測試,等下把手冊給大家。我也是網上下載的。

碰撞與休眠
剛體與物體之間是存在碰撞的,一旦剛體開始移動,就可以在系統方法中監聽剛體的碰撞狀態,碰撞分為三種:
1:進入碰撞
2:碰撞中
3:碰撞結束
我們通過一張圖片來了解

碰撞器
游戲對象如果需要感應碰撞,那么必須給其添加碰撞器,默認情況下,創建游戲對象時,會自動將碰撞器添加到其中。
unity一共為對象提供了6種碰撞器
1:Box Collider 盒子碰撞器
2:Sphere Collider 球體碰撞器
3:Capsule Collider 膠囊碰撞器
4:Mesh Collider 網格碰撞器
5:Wheel Collider 車輪碰撞器
6:Terrain Collider 地形碰撞器

在碰撞器之間可以添加物理材質,用於設定物理碰撞后的效果,它將將開始
相互反彈,反彈的力度是有物理材質決定的。

unity標准資源包中提供了一些物理材質的資源,我們可以導入到當前工程中

導入成功后:

好。我們可以看出之前的游戲中,球體下落是立即禁止的。
現在給之前的Plane添加彈性材質,運行游戲

可以看到剛體在彈性材質的作用下。會反彈
碰撞檢測
1:兩個游戲對象必須有Collider
2:對於雙方都要檢測的物體,至少其中一個必須是剛體。
3:如果剛體是運動的,那么在雙方都沒有設置碰撞體的 Is Trigger屬性的時候,
雙方都可以通過OnCollisionEnter函數檢測碰撞
4:如果至少一個碰撞體Is Trigger被設置,那么雙方可以通過OnTriggerEnter檢測碰撞
http://pan.baidu.com/s/1o6HovDC 密鑰:j3ir
