在移動或旋轉一個物體時,我們往往會直接使用Transform來執行這些操作。這種方法對于不具實體特性的GameObject來說,是可行的。但是一旦GameObject上附帶有剛體元件,這種方式就會帶來性能的損失。對于有剛體的遊戲物體官方強烈建議使用實體方式使其移動
一:Rigibody2D

——BodyType:剛體類型
1.Dynaimc:動态類型,預設此類型
2.Kinematic:動力學類型(開啟後遊戲對象則不再受到實體引擎的影響進而隻能通過Transform屬性來對其操作)
3.Static:靜态類型
——Material:實體材質(本文章第三節)
——Use Auto Mass:使用自動計算的品質
——Mass:品質(建議同一場景中的遊戲對象之間的品質內插補點不要大于100倍)
——Linear Drag:運動方向的空氣阻力
——Angular Drag:旋轉時受到的空氣阻力
——Gravity Scale:重力縮放
——Collision Detection:碰撞檢測類型,是為了避免高速運動的碰撞體進行檢測時的穿模現象,例如賽車遊戲
1.Discrete:離散碰撞檢測,正常速度下可以使用離散碰撞檢測
2.Continuous:連續碰撞檢測,适用于可能會被高速移動物體撞上的物體
注意使用Continuous這種類型進行檢測會産生性能的消耗
——Sleeping Mode:休眠模式
1.Never Sleep:永不休眠
2.Start Awake:在程式啟動時喚醒
3.Start Asleep:在碰撞檢測時喚醒,其餘時間處在休眠狀态
——Interpolate:插值(基本上使用不到)
——Constraints:限制,可以當機受到實體的力所改變的位置與旋轉,使用Translate進行移動并不會被影響
二:Rigibody
——Drag:運動方向的空氣阻力
——Use Gravity:是否使用重力
——IsKinematic:是否開啟動力學(開啟後遊戲對象則不再受到實體引擎的影響進而隻能通過Transform屬性來對其操作)
3.Continuous Dynamic:動态連續碰撞檢測,适用于高速移動的物體
4.Continuous Speculative:推測式連續碰撞檢測,這是唯一的CDD模式
注意Continuous和Continuous Dynamic類型隻支援使用Box,Sphere和Capusle碰撞器的剛體,而且使用這兩種類型進行檢測會産生性能的消耗
三:實體材質
Unity中的剛體
Unity中的剛體
不設定實體材質的物體預設為infinity
——Dynamic Friction:動态摩擦力
——Static Friction:靜态摩擦力
——Bounciness:彈力
——Friction Combine:組合摩擦力
1.Average:平均(取兩個碰撞物體的摩擦力平均值)
2.Mininum:最小值(取兩個物體的摩擦力最小值)
3.Multiply:乘數(取兩個物體的摩擦力的乘積)
4.Maximum:最大值(取兩個物體的摩擦力最大值)
——Bonce Combine:組合彈力
例如很多物體在同一個場景中擠着很卡,如下圖所示這是因為Unity預設碰撞物體有個Physc Material,Friction摩擦力為0.4,可以把Friction設定為0賦給碰撞的物體![]()
Unity中的剛體
四:幾點需要注意的
——兩個品質不同的物體從同一高度落地,時間是一樣的。
例如兩個物體品質分别為1和1000,在同一高度落下,落地的時間是相同的。
由公式可知,落地的時間與品質無關。
但是在現實生活中結果卻不是這樣,因為現實中有空氣阻力的存在,而在虛拟世界或者在真空中可以完全忽略空氣阻力
——兩個物體發生碰撞的條件:兩個物體都有碰撞器并且其中一個有剛體元件