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

    Unity3D Rigidbody詳解(jiě)

    2018/3/5      點擊:

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

    屬性

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

    Drag 空(kōng)氣阻力,為0表(biǎo)示沒有阻力,infinity表示立即停止移動

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

    Use Gravity 是否受重力(lì)影響

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

    Interpolate 如果你的剛體運(yùn)動時有抖動,嚐(cháng)試一下(xià)修改這個參數,None表示(shì)沒有插值,Interpolate表示根據上一楨的位置來做平(píng)滑插值,Extrapolate表(biǎo)示根據預測的下一楨的位置來做(zuò)平滑插值

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

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

    Constraints 剛(gāng)體運動的約束,包括位置約束和旋轉約束,勾選表示(shì)在(zài)該坐標上不(bú)允許進行(háng)此類操作

    詳細描述

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

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

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

    Parenting

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

    Scripting

    控製剛體的方法主(zhǔ)要是通(tōng)過腳本來施加推力和扭力,通過(guò)在剛體對(duì)象上調用AddForce()和AddTorque()方法。再次注意,當你使用物理引(yǐn)擎來(lái)控製剛(gāng)體的時(shí)候,不要直接操(cāo)作對象的變換數值。

    Animation

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

    Colliders

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

    Composed Colliders

    由多(duō)個基本的碰撞體對象組合而成,扮演一個獨立的碰撞體對(duì)象。當你有(yǒu)一個複雜的模型,而你又不能使用Mesh Collider的(de)時候就可以使用組合碰撞體。

    Continuous Collision Detection

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

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

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

    Use The Right Size

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

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

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

    如果你的遊戲(xì)需要你實例化(huà)具有不同縮放值的對象,你也可以調整變換裏的縮放值,但是物理引擎來創建這個對(duì)象的時候會額外多做一點(diǎn)工作,這可能會引起一點性能問題。

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

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

    Hints

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

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

    低的阻力值(zhí)使得對象看起來更重,高(gāo)的阻力值使對象看起來更輕。

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

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

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

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

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