【Unity】11.2 剛體(Rigidbody)

分類:Unity、C#、VS2015 ide

建立日期:2016-05-02 性能

1、簡介

Rigidbody(剛體)組件可以使遊戲對象在物理系統的控制下來運動,剛體可接受外力與扭矩力,使遊戲對象像在真實世界中那樣進行運動。 測試

任何遊戲對象,只有對其添加了剛體組件,該對象才能受重力的影響。 動畫

經過腳本爲遊戲對象添加的做用力,以及經過NVIDlA物理引擎與其餘的遊戲對象發生互動的運算,都須要爲遊戲對象添加剛體組件。 orm

2、如何爲對象添加剛體

在Unity 5.x中爲某個遊戲對象添加剛體組件的辦法是:選中要添加剛體的遊戲對象-->【Component】-->【Physics】-->【Rigidbody】,這樣就爲該對象添加了剛體。 對象

添加剛體和碰撞體後,選擇該對象,就會看到其周圍被一層綠色的框線包圍: blog

image

添加剛體和碰撞體的目的主要用於將該對象和其餘對象之間進行碰撞檢測。碰撞體既能夠用膠囊體來實現,也能夠用其餘碰撞體組件來實現。 遊戲

3、相關屬性

與剛體相關的屬性以下。 事件

一、Mass (質量) get

對象的質量(任意單位)。不該使質量比其餘剛體 (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) 進行平滑處理。

七、Collision Detection (碰撞檢測)

該屬性用於控制避免高速運動的遊戲對象穿過其餘的對象而未發生碰撞。選項有:

(1)Discrete(離散)

對場景中的全部其餘碰撞體 (Collider) 所有使用離散 (Discreet) 碰撞檢測。該項爲默認值。

(2)Continuous (連續)

對剛體 (Rigidbody) 進行碰撞測試時,對帶有剛體的動態碰撞體 (Collider) 使用離散 (Discreet) 碰撞檢測;對不帶剛體的靜態網格碰撞體 (static Mesh Collider)使用連續 (Continuous) 碰撞檢測。

(3)Continuous Dynamic (連續動態)

該選項可用於快速移動的對象。

對設置爲「連續」(Continuous) 和「連續動態」(Continuous Dynamic) 碰撞的對象使用連續 (Continuous) 碰撞檢測。它對不帶剛體的靜態網格碰撞體也使用連續 (Continuous) 碰撞檢測。對於全部其餘碰撞體 (Collider),使用離散 (Discreet) 碰撞檢測。

注意:連續動態(Continuous Dynamic) 檢測須要與之碰撞的對象對物理性能的影響很是大,若是對快速對象的碰撞沒有問題,應該將其設置爲「離散」(Discreet)而不是連續動態。

八、Constraints (約束)

對剛體 (Rigidbody) 運動的限制。

(1)Freeze Position (凍結位置)

選擇性地在世界座標 X、Y 和 Z 軸上中止剛體 (Rigidbody) 移動。即:剛體對象在世界座標系中的X、Y、4由方向上(勾選狀態)的移動將無效。

(2)Freeze Rotation (凍結旋轉)

選擇性地中止剛體 (Rigidbody) 圍繞世界座標 X、Y 和 Z 軸的旋轉。即:剛體對象在世界座標系中的X、Y、4由方向上(勾選狀態)的旋轉將無效。

3、注意事項

一、Rigidbody和Transform只能二選一

剛體(Rigidbody)會使遊戲對象在物理引擎的控制下運動,例如能夠以真實的碰撞形式來開門或計算其餘的行爲。經過在剛體上添加做用力來操做遊戲對象,這與直接調整Transform組件相比在視覺及感覺上都有很大的不一樣。一般狀況下,沒有必要在操做—個對象剛體的同時也操做其Transform,只須要二選其一便可。

操做遊戲對象的Rigidbody與操做該對象的Transform最大的不一樣就是剛體有做用力,並且剛體能夠接受外力和扭矩,可是Transform沒法達到該效果。Transform能夠移動和旋轉游戲對象,這與使用物理的方式並不相同。

對—個剛體添加外力或扭矩實際上也會改變該對象Transform組件的移動和旋轉,這也就是這二者只須要選其一的緣由。使用物理方式操做對象的同時又改變它的Transform會致使碰撞及其餘相關的計算出現問題。

剛體在受物理引擎做用以前必需要明確地將其添加給一個遊戲對象,以後該對象就會受到重力和經過腳本添加的做用力的影響,但根據實際狀況可能還須要爲其添加碰撞體或關節等以便達到預期的行爲效果。

二、父子化 (Parenting)

當對象處於物理控制之下時,其移動方式與其變換父級的移動方式半獨立。若是移動任何父級,則會隨它們一塊兒拉動剛體 (Rigidbody) 的子級。可是,剛體 (Rigidbody) 仍會因爲重力的做用而下落並對碰撞事件做出反應。

三、腳本處理

要控制剛體 (Rigidbody),主要使用腳本添加力或扭矩。可經過對對象的剛體 (Rigidbody) 調用 AddForce() 和 AddTorque() 來實現此目的。

記住:不該在使用物理時直接改變對象的變換 (Transform)。

四、動畫

有些狀況下,如須要建立布娃娃效果的時候,須要在動畫和物理系統間切換對象的控制權。所以當剛體被標記爲動力學(isKinematic)模式時,就不會受到如碰撞、做用力或其餘物理效果的影響,這就意味着須要直接操做該對象的Transform組件屬性來控制該對象了。動力學剛體(Kinematic Rigidbody)會影響其餘的對象,但其自身並不受到物理系統的影響。例如,那些綁定到動力學(Kinematic)對象上的關節(Joint)會約束其餘綁定到該對象上的剛體(Rigidbody),動力學剛體(Kinematic Rigidbody)在碰撞時會影晌其餘的剛體。

相關文章
相關標籤/搜索