我們在unity裡面建了一個正方體cube , 要如何使這個cube可以跟現實中的物體一樣受重力呢 ? 這就需要用到Rigidbody(剛體)組件了 .
單擊cube , 在右邊的Inspector面板添加Rigidbody組件
添加完Rigidbody組件後,cube1就可以受重力影響了,運行unity時,cube1會因為受到重力往下落.
下面為大家介紹 Rigidbody 組件常用參數 :
1. Mass : 物體的質量 . 官方建議物體質量最好不要大於其他物體的100倍或者小於其他物體的 1/100 ;
2. Drag : 空氣阻力 . 數值越大,表示物體所受阻力越大,物體越難移動 ;
3. Angular Drag : 角阻力,也就是物體旋轉受到的阻力 ,數值越大物體越難旋轉 ;
4. Use Gravity : 是否開啟重力 , 開啟的話,遊戲物體會受重力影響 ;
5. Is Kinematic : 是否開啟動力學 . 如果開啟的話 , 遊戲物體將不再受物理引擎的影響 , 只能通過 Transform 來改變物體的位置,旋轉等 ;
如圖 cube1(紅色 , 勾選了 Is Kinematic ) , cube2 (綠色 , 沒勾選 Is Kinematic ) 原本處於同一高度, 運行狀態下 , cube2由於沒有勾選 Is Kinematic 選項 , 受到重力影響會下落 ;
6. Interpolate : 插值 . 用來控制剛體運動的抖動情況 , 因為物理運算和畫面更新不同步造成的. Interpolate是枚舉類型 , 有以下三個選項 .
(1) . None : 沒有插值
(2) . Interpolate : 內插值 . 基於前一幀的 Transform 來平滑此次的 Transform
(3) . Extrapolate : 外插值 . 基於下一幀的 Transform 來平滑此次的 Transform
如圖 cube1 (None) , cube2 (Interpolate) , cube3 (Extrapolate) .
遊戲運行時 :
cube1 : 出現抖動 ;
cube2 : 平滑落下 , 但是比 cube1 後落地;
cube3 : 平滑落下 , 但和 cube1 同時落地;
由此可以看出 , Interpolate 和 Extrapolate 的區別就在於使用的算法不一樣 , Extrapolate在物理上會比較準確 ;
7. Collision Detection : 碰撞檢測 . 用於控制避免高速運動的物體穿過其他的物體而並沒有發生碰撞 , 也是一個枚舉類型 , 有以下三個選項
(1) . Discrete : 離散碰撞檢測 . 與場景中其他所有的碰撞體進行碰撞檢測 , 為默認值 ;
(2) . Continuous : 連續碰撞檢測 . 適用於需要與連續動態碰撞檢測的對象相碰撞的對象. 很耗費性能 ,一般不用 ;
(3) . Continuous Dynamic : 連續動態碰撞檢測 . 適用於檢測快速運動的遊戲對象 ;
如圖 cube1 (Discrete) , cube2 (Continuous) , cube3 (Continuous Dynamic) 置於 1000米的高度 .
遊戲運行時 :
cube1 : 高速下落 , 穿過地面 ;
cube2 : 落在地面靜止 ;
cube3 : 落在地面靜止 ;
由此看出 : cube1 在高速運動時已經完全穿透 , cube2防止穿透靜態對象 , cube3 防止穿透包含 Continuous 和 Continuous Dynamic 選項的物體 .
8. Constraints : 約束 . 用來凍結物體 x ,y ,z 軸的移動和旋轉 .
(1) . Freeze Position : 凍結位置 . x , y , z 軸方向上 , 勾選狀態的話 , 在該軸上的移動無效 ;
(2) . Freeze Rotation : 凍結旋轉 . x , y , z 軸方向上 , 勾選狀態的話 , 在該軸上的旋轉無效 ;
好了 , 今天的剛體組件就介紹到這裡 ,大家有什麼問題可以在評論區留言 , 我會為大家解答 .
遊戲物體添加了剛體組件以後 , 就可以模擬碰撞了嗎 ? 答案是 No ... , 兩個或多個遊戲物體發生碰撞,只靠剛體是不夠的 , 明天為大家帶來另一個不可獲取的組件詳解 .