• 您的位置(zhì):首頁 > 新(xīn)聞動態 > Unity3D

    Unity3D Rigidbody詳解

    2018/3/5      點擊:

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

    屬(shǔ)性

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

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

    Angular Drag 扭力的阻力,數(shù)值(zhí)意義同上(shàng)

    Use Gravity 是(shì)否受(shòu)重(chóng)力影響

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

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

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

    Collision Detection 碰撞檢測算法,用於防止剛體因快速移動而穿過其他對象

    Constraints 剛體運動的約束,包(bāo)括位置約束和旋轉約束,勾選表(biǎo)示(shì)在該坐標上不允許進行此類操作(zuò)

    詳細描(miáo)述

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

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

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

    Parenting

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

    Scripting

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

    Animation

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

    Colliders

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

    Composed Colliders

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

    Continuous Collision Detection

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

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

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

    Use The Right Size

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

    對(duì)於一個人類角色模型來說,他應(yīng)該有2米(mǐ)高。可以創建一個Box來作為參照物,默(mò)認的Box為1米,所以一個角色應該是Box的兩倍高。

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

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

    這個問題不(bú)會太嚴重,但性能顯(xiǎn)然會比上麵兩種方法低。

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

    Hints

    兩個(gè)剛體的相對質量決定他(tā)們在碰撞的時候(hòu)將會(huì)如何反應。

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

    低的阻力值使得對象看起來更重,高的阻力值(zhí)使對象(xiàng)看起來更輕。

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

    如果你想同時使用變換和(hé)物理來(lái)控製對象,那麽給他(tā)一個剛(gāng)體組件並將其設置為Kinematic

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

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

    AV永久天堂网_奇米狠狠色_亚洲欧美日韩动漫_欧美日韩视频在线观看免费一区二区_日韩精品一二三区_国产AV网站18禁止人_久久久久久精品人妻免费网站不卡_国产最新视频_另类免费视频在线视频二区_久久精品免视国产