• Unity3D Rigidbody詳解

    2018/3/5      點擊:

    剛體能讓你的遊戲對象(xiàng)被物理引擎所控製,它能通過受(shòu)到推力和(hé)扭力來(lái)實現(xiàn)真實的物理表現效果。所有遊戲(xì)對象必須包含剛體組件來實現(xiàn)重力、通過腳本施加力、或者與(yǔ)其他對象進(jìn)行交互,這一切都通過NVIDIA的PhysX物理引擎來實現。

    屬性

    Mass 質量,單位為Kg,建議不要讓對象之間的質量差達到100倍以上

    Drag 空氣阻力,為0表示沒有阻力(lì),infinity表示(shì)立即停止移動

    Angular Drag 扭力的阻力(lì),數(shù)值意義同上

    Use Gravity 是否(fǒu)受(shòu)重力影響

    Is Kinematic 是(shì)否為Kinematic剛體,如果啟用該參數,則(zé)對象(xiàng)不會被物理所控(kòng)製,隻能通(tōng)過直接設置位置、旋(xuán)轉和縮放來操作它,一般用來實現移動平台,或者帶有HingeJoint的動畫(huà)剛體

    Interpolate 如果你的剛體運動時有抖動,嚐試一下修改這個參數,None表示沒(méi)有插值,Interpolate表示根據上(shàng)一楨的(de)位置來做平滑(huá)插值,Extrapolate表示根據預測的下(xià)一楨的位置來做平滑插值

    Freeze Rotation 如(rú)果選中(zhōng)了該選項,那麽剛體(tǐ)將不會因為外力或者扭力而發生旋轉,你隻能通過腳本的旋(xuán)轉函數來進(jìn)行操(cāo)作

    Collision Detection 碰撞檢測算法,用(yòng)於防止(zhǐ)剛體因快速移動而穿過(guò)其他對象

    Constraints 剛體(tǐ)運動的約(yuē)束,包括位置約束和旋轉約束,勾選表示(shì)在該坐標上不允許(xǔ)進行此類操作

    詳細描述(shù)

    剛體讓你的遊戲對象處於物理引擎的控製(zhì)之下,這打開了實現真實碰撞,各種連接類型,以及其他(tā)各種效果的大門。通過給剛體施加外力來移(yí)動(dòng)它,與以(yǐ)前的(de)通過設置其位(wèi)置變換來移動它有比較大的不同。通(tōng)常情況下,你不會同時操作剛體和變換,你隻會使用其中之(zhī)一。

    這兩者之間(jiān)*大的差異在於力(Forces)的使(shǐ)用,剛體能接受推(tuī)力和扭力,變換不可以。變(biàn)換同樣可以實現位置變化與旋轉,但這與通過物理引(yǐn)擎來實現是不一樣的。給剛體施加力來移動他的時候同時也會影響對象的變換數值,這也是為什(shí)麽隻能使用(yòng)這兩者(zhě)之一的原因(yīn),如果同(tóng)時(shí)直接操作了剛體的變換,那(nà)麽在執行碰撞和(hé)其他操作的時候會出問題。

    你必須顯示的將剛體組件添加到你的遊戲對象上,通過菜單項 Component -> Physics -> Rigidbody即可添加,之後對象(xiàng)就處於物理引擎控製之下了,他會受到重力的影響而下落(luò),也能(néng)夠通過腳本來受力,不過你可能還需要添加一個Collider或者Joint來讓他(tā)表(biǎo)現的更像你所期望的。

    Parenting

    當一個對象處於物理引(yǐn)擎控製之下(xià),他的運動將會與其父對象(xiàng)的移動半獨立(lì)開(kāi)。如果你移動任意的父對象(xiàng),他們(men)將會拉動剛體子對象,然而,剛體在重力及(jí)碰撞影響下還會下落。

    Scripting

    控製(zhì)剛體的方法主要是通過腳本來施(shī)加推力和扭力,通過在(zài)剛體對象上調用AddForce()和AddTorque()方法。再次注意,當你使用物(wù)理引擎來控製剛體的時候(hòu),不要直接操作對象的變換數值。

    Animation

    在某些(xiē)時候,主要是創建紙娃娃效果的(de)時候,你可能需要在動畫與物理控製之(zhī)間進行切換。你可以將剛體設(shè)置為IsKinematic,當設(shè)置為Kinematic模式,它將不再受到外力影響。這時你(nǐ)隻能通過變換方(fāng)式來(lái)操作對象,但是Kinematic剛體還會影響其他剛體,但他自己不會再受物理引擎控(kòng)製。比如,連在Kinematic剛體上的Joints還會繼續影響連接的另一個非Kinematic剛(gāng)體,同時也能夠給(gěi)其他剛體產生碰撞(zhuàng)力。

    Colliders

    碰撞體是另一類必須手動添加的的組件,用來讓對象(xiàng)能夠發生碰撞。當(dāng)兩個剛體接觸到一起的時候,除非兩個剛體都設置了碰撞屬性,否則物理引擎是不會計算他們的碰撞的。沒有碰撞體的剛體在進行物理模擬的時候將會簡單的穿(chuān)過其他剛體。

    Composed Colliders

    由多個(gè)基本的碰撞體對象組合而成,扮演一個獨(dú)立的碰撞體對象。當你有一個複雜的模型,而你又(yòu)不能使用Mesh Collider的時候就可以使用組(zǔ)合碰撞體。

    Continuous Collision Detection

    CCD用來防止快速移動的物體穿過(guò)其他(tā)對象。

    當(dāng)使(shǐ)用默認的離散式碰撞檢測時,如果前一楨(zhēn)時對象在牆(qiáng)這(zhè)一麵,下一楨(zhēn)時對象已到到了牆另一麵,那麽碰撞檢測算法(fǎ)將檢測不到碰撞的發生,你可以將該(gāi)對象的碰撞檢測屬性設置為(wéi)Continuous,這時碰(pèng)撞檢測算法將(jiāng)會防止對象穿過所有的靜態(tài)碰撞體,設置為Continuous Dynamic將還會防止(zhǐ)穿過其他也設置為Continuous或者Continuous Dynamic的剛(gāng)體。

    CCD隻(zhī)支持Box,Sphere和(hé)Capsule的碰撞體。

    Use The Right Size

    當使用(yòng)物理引擎的時候,遊戲對象的大小比剛(gāng)體的質量更重要。如果你發現剛體的行為不是你所(suǒ)期望的,比如移動的太(tài)慢,漂浮,或者(zhě)不能(néng)正(zhèng)確的進(jìn)行碰撞,嚐試一下修(xiū)改你(nǐ)的模型(xíng)的縮(suō)放值。Unity的默認單位是1 unit = 1 米,物理引擎的計算也(yě)是按照這個(gè)單(dān)位來的。比如,一個摩天(tiān)大(dà)樓的倒塌(tā)與一個(gè)由積木搭成的玩具房子的倒塌是完全不一樣(yàng)的,所以(yǐ),不同(tóng)大小的對象在建模時都應該按照統一的比例(lì)。

    對於一個人類角色(sè)模型來說,他應該有2米高。可以創建一個Box來作為參照物,默認(rèn)的(de)Box為1米,所以一個角色應(yīng)該是Box的兩(liǎng)倍高。

    當然,你也可以通過修改導入模型的縮放(fàng)來調整比(bǐ)例(lì),如果你不能直接修改模型本身的話。在Project麵板中選中模型,調整其Importer屬性,注意不是變換裏的縮放。

    如果你的遊戲需要你實例化具有不同縮放值的對象(xiàng),你也可以調整(zhěng)變(biàn)換裏(lǐ)的縮放值,但是物理引擎來創建這個對象的時候(hòu)會(huì)額外多做(zuò)一點工作,這可能(néng)會(huì)引起一點性能問題(tí)。

    這個(gè)問題不會太(tài)嚴重,但性能(néng)顯然會比上麵兩種方(fāng)法(fǎ)低。

    同樣要注意的是,non-uniform scales也會引起一些問題,如果這個對象具有父對象的話。基於以上原因,盡可能的在(zài)製作模型的時候(hòu)就(jiù)按照Unity的比例(lì)來建模。

    Hints

    兩個剛體的相對質量決定他們在碰撞的時候將會如何反應(yīng)。

    給(gěi)剛體(tǐ)設置更大的質量並不會讓(ràng)它下(xià)降的更快,如果要實現(xiàn)這(zhè)個目的,使(shǐ)用Drag參數。

    低的阻力值使得對象看起來更重,高的阻力值使對象看起來更輕。

    典(diǎn)型的(de)Drag值(zhí)介於0.001(固體金(jīn)屬)到10(羽毛)之間(jiān)。

    如果你想同時(shí)使用變(biàn)換和物理來控(kòng)製對象(xiàng),那麽給他一個剛體組件並將其設置為Kinematic

    如果你通(tōng)過變換來移動對象,同時(shí)又(yòu)想收到對象的碰撞消息,那麽必須給他一個剛(gāng)體組件。

    Mass(質量):
    學過(guò)物理的同學們都知道的吧,質量越大,慣性(xìng)越大。這裏的(de)單位(wèi)可(kě)以(yǐ)自己統一規定,但是官(guān)方給出的建議是場景中的物體質量*好不要(yào)相差100倍率以上(shàng)。估計是防止兩個質量相差太(tài)大的物(wù)體碰撞後會產生過(guò)大(dà)的速度,從而影響遊戲性能吧。Drag(阻力):這裏指的是空氣阻力,當遊戲物體(tǐ)收到某個作用力的時候,這個(gè)值越大越(yuè)難(nán)移動。如果設置成無限的話,物(wù)體會立即停止移動。Angular Drag(角阻力):
    同樣指的是空氣阻力,隻不過是用來阻礙(ài)物體旋轉的。如果設置成無限的話,物體會(huì)立(lì)即停止旋轉。Use Gravity(使用重力):
    勾選了(le)這個(gè)項,遊戲對象就會受到(dào)重力影響。Is Kinematic(是否動態(tài)):
    勾選這個選項會使遊戲對象不受物理引擎的影響,但這不等同於沒有剛體組件(jiàn)。這通常用於需要用動畫控製(zhì)的剛體,這樣就不會因為慣性而影響動畫了。Interplate(差值類型):如果看到剛體移動的時候一直抽風(fēng)或者(zhě)運動的不是很平(píng)滑,可以選擇一種平(píng)滑方式:
    None(無差值(zhí)):不使(shǐ)用差值平滑。
    Interpolate(差值):根據上(shàng)一幀來平滑移動。
    Extrapolate(推算):根據推算(suàn)下一幀(zhēn)物體(tǐ)的位置來平滑移動(dòng)。Collision Detection(碰撞檢測方式):
    Discrete(離散):默認的碰撞檢測方式。但若當物體A運動很快(kuài)的時候,有可能前一幀還在B物體的前麵,後一幀就在B物體後麵了,這種情況下不會觸發碰撞事件,所以如果需要檢測這種情況,那就必須(xū)使用後兩種檢測方式。
    Continuous(連續):這種方式可以與有靜態網格碰撞器的遊戲對象進行碰(pèng)撞檢測。
    Continuous Dynamic(動(dòng)態連續):這種方式可以與所有設置(zhì)了2或3方式的遊戲對象進(jìn)行碰撞檢測。Freeze Position/Rotation(凍結位置/旋轉):
    可以對(duì)物體在X、Y、Z三個軸上的位置/旋轉進(jìn)行(háng)鎖定,即使受到相應的力也不會改變,但可以通過腳本來修改。
    *後順便再提一下恒力(lì)組件(jiàn)(Constant Force),由於比(bǐ)較容易理解我就不做詳細介紹(shào)了(le)。一共有4個(gè)參數,分別是Force/Relative Force(世界/相對作用力)、Torque/Relative Torque(世界/相對扭力(lì))。這些參數代表了附(fù)加在剛(gāng)體上的XYZ軸方向恒力(lì)的大小,另外還要注意(yì)必(bì)須是剛體才可(kě)以添加恒力。

    91影视免费版下载-91麻豆国产福利精品-91麻豆精品一二三区在线-国产91系列视频在线观看