• 您的位置:首頁 > 新聞動態 > Unity3D

    Unity3D Rigidbody詳解(jiě)

    2018/3/5      點擊:

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

    屬性

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

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

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

    Use Gravity 是否(fǒu)受重力影響(xiǎng)

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

    Interpolate 如果你的剛體運動時有(yǒu)抖動(dòng),嚐試一下修改這個參數,None表示沒有插值,Interpolate表示根據上一楨的位置來做平(píng)滑插值,Extrapolate表示根據預測(cè)的下一楨的位置來做(zuò)平滑插值

    Freeze Rotation 如果選中了該選項,那麽剛體將(jiāng)不會(huì)因為外(wài)力或者扭力而發生旋轉,你隻能通過腳本的(de)旋轉函數來進行操作

    Collision Detection 碰撞檢測算法(fǎ),用於防止剛體因快速移動而穿過其(qí)他對象(xiàng)

    Constraints 剛體運動的(de)約束(shù),包括(kuò)位置約束和(hé)旋轉約束,勾選表示在該坐標上不允許進行此類操作

    詳細(xì)描述(shù)

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

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

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

    Parenting

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

    Scripting

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

    Animation

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

    Colliders

    碰撞體是另一(yī)類(lèi)必須手動添加的(de)的組件,用來讓(ràng)對象能夠發生碰撞。當兩個剛體接觸到一起的(de)時(shí)候,除非兩個剛體都設置(zhì)了(le)碰撞屬性,否則物理引擎是不會計(jì)算他們的碰撞的。沒有碰撞體的剛體在進行物理模擬的時候將會(huì)簡單的穿過其他(tā)剛體。

    Composed Colliders

    由多個基本的碰撞體對象組合而成,扮演一個獨立的碰撞體對象。當你有一(yī)個(gè)複雜的模型(xíng),而你又不(bú)能使(shǐ)用Mesh Collider的(de)時(shí)候(hòu)就可以(yǐ)使用組合碰撞(zhuàng)體。

    Continuous Collision Detection

    CCD用來防止快速移(yí)動(dòng)的物體穿過其他對象。

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

    CCD隻支持Box,Sphere和Capsule的碰撞體。

    Use The Right Size

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

    對於一個人類角(jiǎo)色模型(xíng)來(lái)說(shuō),他(tā)應該有2米高。可以創建一(yī)個Box來作(zuò)為參照物,默認的Box為1米,所以(yǐ)一個(gè)角(jiǎo)色應(yīng)該是Box的兩倍高。

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

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

    這個問題不會(huì)太嚴重,但(dàn)性能顯然會比上麵(miàn)兩種方法低。

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

    Hints

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

    給剛體設置更大的質量並不會讓它下降(jiàng)的更快,如果要實現這個目的,使用Drag參數。

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

    典型的(de)Drag值介於0.001(固體金屬)到(dào)10(羽毛)之間。

    如(rú)果你想同時使用變換和物理來控製對象,那麽給他一(yī)個剛體組件並將其設置為Kinematic

    如果(guǒ)你通過變換(huàn)來移動對(duì)象,同時又想收到對象的碰撞消息,那麽必(bì)須給他一個剛體組(zǔ)件。

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

    91网站入口_91视频导航_91短视频在线_91视频在线免费观看