天天看點

Unity中的剛體

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

一:Rigibody2D

Unity中的剛體

——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

Unity中的剛體

——Drag:運動方向的空氣阻力

——Use Gravity:是否使用重力

——IsKinematic:是否開啟動力學(開啟後遊戲對象則不再受到實體引擎的影響進而隻能通過Transform屬性來對其操作)

3.Continuous Dynamic:動态連續碰撞檢測,适用于高速移動的物體

4.Continuous Speculative:推測式連續碰撞檢測,這是唯一的CDD模式

注意Continuous和Continuous Dynamic類型隻支援使用Box,Sphere和Capusle碰撞器的剛體,而且使用這兩種類型進行檢測會産生性能的消耗

Unity中的剛體

三:實體材質

Unity中的剛體
Unity中的剛體

不設定實體材質的物體預設為infinity

——Dynamic Friction:動态摩擦力

——Static Friction:靜态摩擦力

——Bounciness:彈力

——Friction Combine:組合摩擦力

1.Average:平均(取兩個碰撞物體的摩擦力平均值)

2.Mininum:最小值(取兩個物體的摩擦力最小值)

3.Multiply:乘數(取兩個物體的摩擦力的乘積)

4.Maximum:最大值(取兩個物體的摩擦力最大值)

——Bonce Combine:組合彈力

例如很多物體在同一個場景中擠着很卡,如下圖所示
Unity中的剛體
這是因為Unity預設碰撞物體有個Physc Material,Friction摩擦力為0.4,可以把Friction設定為0賦給碰撞的物體

四:幾點需要注意的

——兩個品質不同的物體從同一高度落地,時間是一樣的。

例如兩個物體品質分别為1和1000,在同一高度落下,落地的時間是相同的。

Unity中的剛體

由公式可知,落地的時間與品質無關。

但是在現實生活中結果卻不是這樣,因為現實中有空氣阻力的存在,而在虛拟世界或者在真空中可以完全忽略空氣阻力

——兩個物體發生碰撞的條件:兩個物體都有碰撞器并且其中一個有剛體元件

上一篇: Unity中的Time