遊戲對像添加Rigidbody組件後即具備物理屬性,當其受力和扭矩影響時可產生更加真實的行為。當操作剛體參數的時候,你應該在FixedUpdate函數中使用它,物理模擬以離散的時間步執行。FixedUpdate函數在每一步之前被立即調用。使用剛體時應注意,父物體和子物體不應同時具有剛體,也不應該縮放剛體的父級。
變量:
var velocity : Vector3 剛體的速度向量
var angularVelocity : Vector3 剛體的角速度向量。
var drag : float 物體的阻力
var angularDrag : float 物體的角阻力
var mass : float 剛體的質量
var useGravity : bool 是否受重力影響
var isKinematic : bool
是否是運動學剛體。運動學剛體不受力、碰撞或關節控制,完全由動畫或代碼(Transform)驅動,但運動學剛體可以通過碰撞或關節影響其他剛體的運動。非運動學剛體則受力、碰撞或關節控制。
var freezeRotation : bool 凍結旋轉,使物理因素不能改變物體的旋轉
var collisionDetectionMode :CollisionDetectionMode
剛體的碰撞檢測模式。為了獲得最佳效果,對於快速移動的物體,應設置動態連續碰撞檢測模式(ContinuousDynamic),以防止物體還沒檢測到碰撞就穿越了被碰撞物體;對於被碰撞物體,應設置連續碰撞檢測模式(Continuous,連續碰撞檢測是基於網格幾何體的靜態碰撞)。由於碰撞檢測模式的選擇對物理性能有很大的影響,默認情況下,應採用非連續碰撞檢測模式(Discrete)。
var centerOfMass : Vector3
重心。如果你不在腳本中設置重心,它將從所有附加到剛體上的碰撞器自動計算。重心的設置關係到物理運動的真實性。
var worldCenterOfMass : Vector3 在世界坐標中剛體的重心。(只讀)
var detectCollisions : bool 碰撞檢測是否啟用(默認總是啟用的)。
var position : Vector3
剛體的位置,只在物理步結束才應用到變換,不能用於連續移動。
var rotation : Quaternion 剛體的旋轉,只在物理步結束才應用到變換,不能用於連續旋轉。
var interpolation : RigidbodyInterpolation
剛體插值,用以平滑物理運動的顯示效果,默認是關閉的(None)。物理運動以離散的時間步運行,而顯卡以可變的幀率渲染,這可能導致物體抖動。對於主角或相機跟隨的物體,建議使用插值。
函數:
移動
function AddForce (force : Vector3, mode :ForceMode = ForceMode.Force) : void
添加一個力到剛體。作為結果剛體將開始移動。
枚舉類型ForceMode
值: Force 添加一個可持續力到剛體,使用它的質量。
Acceleration 添加一個可持續加速度到剛體,忽略它的質量。
Impulse 添加一個瞬間衝擊力到剛體,使用它的質量。
VelocityChange 添加一個瞬間速度變化給剛體,忽略它的質量。
function AddForce (x : float, y : float, z: float, mode : ForceMode = ForceMode.Force) : void
添加一個力到剛體。作為結果剛體將開始移動。
function AddRelativeForce (force : Vector3,mode : ForceMode = ForceMode.Force) : void
添加一個力到剛體。相對於本地坐標。
function AddRelativeForce (x : float, y :float, z : float, mode : ForceMode = ForceMode.Force) : void
添加一個力到剛體。相對於本地坐標。
function MovePosition (position : Vector3): void
移動剛體到position。
旋轉
function AddTorque (torque : Vector3, mode: ForceMode = ForceMode.Force) : void
添加一個轉矩到剛體。作為結果剛體將繞著torque軸旋轉,torque的長度決定轉速。
function AddTorque (x : float, y : float, z: float, mode : ForceMode = ForceMode.Force) : void
添加一個轉矩到剛體。作為結果剛體將繞著torque軸旋轉,torque的長度決定轉速。
function AddRelativeTorque (torque :Vector3, mode : ForceMode = ForceMode.Force) : void
添加一個轉矩到剛體,相對於本地坐標。
function AddRelativeTorque (x : float, y :float, z : float, mode : ForceMode = ForceMode.Force) : void
添加一個轉矩到剛體,相對於本地坐標。
function MoveRotation (rot : Quaternion) :void
旋轉剛體到rot。
向物體表面施加力
function AddForceAtPosition (force :Vector3, position : Vector3, mode : ForceMode = ForceMode.Force) : void
在position位置應用force力。作為結果這個將在這個物體上應用一個力矩和力。為了效果的真實性,position的位置應在剛體的表面。
爆炸
function AddExplosionForce (explosionForce: float, explosionPosition : Vector3, explosionRadius : float, upwardsModifier: float = 0.0F, mode :ForceMode = ForceMode.Force) : void
應用一個力到剛體來模擬爆炸效果。爆炸力將隨著到剛體的距離線形衰減。
explosionForce 爆破力
explosionPosition 爆炸位置
explosionRadius 爆破半徑,為0時表示無窮大
upwardsModifier 可以理解為爆炸產生的向上衝擊波的衰減值。值越大,威力越小。
function ClosestPointOnBounds (position :Vector3) : Vector3
計算剛體表面離position最近的點。可用於計算作用到剛體表面上一個點的爆炸力。
獲取速度
function GetRelativePointVelocity(relativePoint : Vector3) : Vector3
獲取剛體上的點相對本地坐標系的速度。獲取的速度有考慮剛體的角速度。
function GetPointVelocity (worldPoint :Vector3) : Vector3
獲取剛體上的點相對世界坐標系的速度。獲取的速度有考慮剛體的角速度。
休眠
function Sleep () : void
強制一個剛體休眠至少一幀。剛體休眠有利於性能優化
function IsSleeping () : bool
判斷剛體是否在休眠
function WakeUp () : void
強制喚醒一個剛體
碰撞掃瞄
function SweepTest (direction : Vector3,out hitInfo : RaycastHit, distance : float = Mathf.Infinity) : bool
碰撞掃瞄,返回是否將要發生碰撞。
direction 掃瞄方向
hitInfo 如果將要發生碰撞(即返回true),hitInfo將包含更多碰撞信息
distance 掃瞄長度
function SweepTestAll (direction : Vector3,distance : float = Mathf.Infinity) : RaycastHit[]
碰撞掃瞄,返回所有碰撞點。