• Unity3D Rigidbody詳解

    2018/3/5      點擊:

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

    屬性

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

    Drag 空氣阻力,為0表示沒有阻力,infinity表示立即停止移動

    Angular Drag 扭力的阻力,數值意義同上

    Use Gravity 是否受重力影響

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

    Interpolate 如(rú)果你的剛體運動時有抖動(dòng),嚐試一下修改這個參數,None表示沒有插值,Interpolate表示根據上一楨的位置(zhì)來做平滑插值,Extrapolate表示根據預測的下一楨的位置來做平滑插值

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

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

    Constraints 剛體運動的約(yuē)束,包括位置約束和旋(xuán)轉約束,勾選表示在該(gāi)坐標上不允許進行此類操作

    詳細描(miáo)述

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

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

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

    Parenting

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

    Scripting

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

    Animation

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

    Colliders

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

    Composed Colliders

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

    Continuous Collision Detection

    CCD用來防止快速移動的物體穿過其他對象。

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

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

    Use The Right Size

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

    對於一個人類角色模型來說,他(tā)應該有2米高。可以創(chuàng)建一個Box來作為(wéi)參照物,默認的Box為1米,所以一個角色應該(gāi)是Box的兩(liǎng)倍高。

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

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

    這個問題不會太嚴重,但性能顯然會比上麵兩種方法低。

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

    Hints

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

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

    低的阻(zǔ)力值使得對象看(kàn)起(qǐ)來更重,高的阻力值(zhí)使對象看起來更輕。

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

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

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

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

    日本中出视频|午夜免费福利在线|亚洲精品亚洲人成在线下载|国产高潮流白浆免费观看不卡|偷拍亚洲欧美|亚洲中文字幕久爱亚洲伊人|久久久久香蕉视频|国产欧美日韩一区|久久国产成人亚洲精品影院老金|久久久久中文字幕