1. 程式人生 > >Unity3D筆記第十天——剛體及物理材質

Unity3D筆記第十天——剛體及物理材質

剛體(Rigidbody)
剛體 (Rigidbody) 使遊戲物件 (GameObject) 在物理控制之下行動。剛體 (Rigidbody) 可以接收力和扭矩以使物件採用逼真方式移動。任


何遊戲物件 (GameObject) 必須包含剛體 (Rigidbody) 才能受重力影響、在新增的力作用下行動(通過指令碼)或是與其他物件互動(通過 


NVIDIA PhysX 物理引擎)。 


剛體元件屬性解析
質量 (Mass):物件的質量(任意單位)。不應使質量比其他剛體 (Rigidbody) 質量大或小 100 倍。
阻力 (Drag):在由於施加力而移動時空氣阻力對物件的影響程度。0 表示無空氣阻力,無窮大使物件立即停止移動。
角阻力 :(Angular Drag):在由於施加扭矩而旋轉時,空氣阻力對物件的影響程度。0 表示無空氣阻力。
注意:不能僅僅通過將其“角阻力”(Angular Drag) 設定為無窮大使物件停止旋轉。
使用重力(Use Gravity):如果啟用,則物件受重力影響。
為運動學(Is Kinematic):如果啟用,則物件不會由物理引擎驅動,只能通過其變換 (Transform)進行處理。對於移動平臺,或是如果要對


附加了鉸鏈關節 (HingeJoint) 的剛體 (Rigidbody) 進行動畫處理,這十分有用。
插值 (Interpolate):僅當在剛體 (Rigidbody) 移動中發現不平穩時,才嘗試這些選項之一。
無 (None):不應用插值。
內插 (Interpolate)
變換 (Transform) 基於上一幀的變換 (Transform) 進行平滑處理。
外插 (Extrapolate):變換 (Transform) 基於下一幀的估計變換 (Transform) 進行平滑處理。
約束 (Constraints):對剛體 (Rigidbody) 運動的限制:
凍結位置 (Freeze Position):選擇性地在世界座標 X、Y 和 Z 軸上停止剛體 (Rigidbody) 移動。
凍結旋轉 (Freeze Rotation):選擇性地停止剛體 (Rigidbody) 圍繞世界座標 X、Y 和 Z 軸的旋轉。

剛體元件屬性解析
碰撞檢測 (Collision Detection):用於防止快速移動的物件在不檢測碰撞的情況下穿過其他物件。
離散 (Discrete):對場景中的所有其他碰撞體使用離散碰撞檢測。其他碰撞體將在對其測試碰撞時使用離散 (Discreet) 碰撞檢測


。用於普通碰撞(這是預設值)。
連續 (Continuous):對動態碰撞體使用離散碰撞檢測,對靜態網格碰撞體 (MeshCollider)使用連續 (Continuous) 碰撞檢測。
在對剛體進行測試碰撞時,設定為“連續動態”(Continuous Dynamic) 的剛體 將使用連續 (Continuous) 碰撞檢測。其


他剛體會使用離散 (Discreet) 碰撞檢測。用於連續動態(Continuous Dynamic) 檢測需要與之碰撞的物件。(這對物理性


能具有較大影響,如果對快速物件的碰撞沒有問題,請將其設定為“離散”(Discreet))
連續動態 (Continuous Dynamic):對設定為“連續”(Continuous) 和“連續動態”(Continuous Dynamic) 碰撞的物件使用連續


(Continuous) 碰撞檢測。它也會對靜態網格碰撞體 (MeshCollider)也將使用連續 (Continuous) 碰撞檢測。對於所有其


他碰撞體,它使用離散 (Discreet) 碰撞檢測。用於快速移動的物件。


剛體屬性解析
velocity:剛體的速度向量例:rigidbody.velocity = new Vector3(0, 10, 0); 
isKinematic:控制物理學是否夠影響這個剛體。例:rigidbody.isKinematic = true; 
mass:剛體的質量例:rigidbody.mass = 0.5f; 
maxAngularVelocity:剛體的最大角速度,(預設7)範圍{0, infinity} 例:rigidbody.maxAngularVelocity = 10; 
position:該剛體的位置例:rigidbody.position = Vector3.zero; 
rotation:該剛體的旋轉例:rigidbody.rotation = Quaternion.identity; 
AddForce:新增一個力到剛體,全域性座標例: rigidbody.sleepVelocity = 0.1f; 
AddTorque:新增一個力矩到剛體,全域性座標例:rigidbody.sleepAngularVelocity = 0.1f;
AddRelativeForce:新增一個力到剛體,自身座標例:rigidbody.useConeFriction = true; 
AddRelativeTorque:新增一個力矩到剛體,自身座標例:other.attachedRigidbody.useGravity = false; 
AddForceAtPosition:在position位置應用force力,作為結果這個將在這個物體上應用一個力矩和力
例:rigidbody.velocity = new Vector3(0, 10, 0); 
AddExplosionForce:應用一個力到剛體來模擬爆炸效果;爆炸力將隨著到剛體的距離線形衰減
例:Debug.Log(rigidbody.worldCenterOfMass); 


Physics Material
物理材質 (Physics Material) 用於調整碰撞物件的摩擦力和反彈效果。摩擦力、彈力和柔軟度是由物理材質決定的。
Unity提供的物理材質資源包中包含了大部分常見的物理材質。


建立Physics Material
建立方法:1.在Project檢視中,點選滑鼠右鍵,依次點選Create->Physic Material即可。
 2.點選選單欄Assets,然後依次點選Create->Physic Material即可。
Physics Material應用
將物理材質 (Physics Material) 從“工程檢視”(Project View) 拖動到場景中的碰撞體 (Collider) 上。
或拖動到Collider元件的Material欄


Physics Material屬性
動態摩擦力 (Dynamic Friction):已在移動時使用的摩擦力。通
常值為 0 至 1。值 0 的狀態類似於冰,值 1 會使其非常快速的靜止下來,除非有很大的力或重力推動物件。
靜態摩擦力 (Static Friction):物件在某個表面上保持靜止時使用的摩擦力。
通常值為 0 至 1。值 0 的狀態類似於冰,值 1 會使物件非常難以移動。
彈力 (Bounciness):表面的反彈程度。值 0 不會反彈。值 1 會反彈而不損失任何能量。
摩擦力合併模式 (Friction Combine Mode):兩個碰撞物件摩擦力的合併方式。
平均值 (Average):計算兩個摩擦力值的平均值。
最小 (Min):使用兩個值的較小值。
最大 (Max):使用兩個值的較大值。
相乘 (Multiply):摩擦力值相互相乘。
合併反彈 (Bounce Combine):兩個碰撞物件彈力的合併方式。其模式與“摩擦力合併模式”(Friction Combine Mode) 相同
相乘 (Multiply):摩擦力值相互相乘。
合併反彈 (Bounce Combine):兩個碰撞物件彈力的合併方式。其模式與“摩擦力合併模式”(Friction Combine Mode) 相同
摩擦力方向 2 (Friction Direction 2):各向異性方向。如果此方向不為零,則啟用各向異性摩擦力。“動態摩擦力 2”(Dynamic


Friction 2) 和“靜態摩擦力 2”(Static Friction 2) 會隨“摩擦力方向 2”(Friction Direction 2) 一起應用。
動態摩擦力 2 (Dynamic Friction 2):如果啟用各向異性摩擦力,則“動態摩擦力 2”(DynamicFriction2) 會隨“摩擦力方向 2”


(Friction Direction 2) 一起應用。
靜態摩擦力 2 (Static Friction 2):如果啟用各向異性摩擦力,則“靜態摩擦力 2”(StaticFriction2) 會隨“摩擦力方向


2”(Friction Direction 2) 一起應用。