• 您的位(wèi)置:首頁 > 新聞動態 > Unity3D

    Unity3d Rigidbody 碰撞穿(chuān)透

    2018/4/25      點擊:

    首先,說說(shuō)碰撞的條件:1.rigidbody(剛體),一般用在主動移動的物體上,比如角色。2.collider,碰撞器,一般用於受力物體(tǐ)上,比如(rú)障礙塊。

    物理的碰撞當然是(shì)基於(yú)物理檢測(cè)計算,而這(zhè)個計算是消耗(hào)cpu和gpu的(de),那麽,碰撞穿透(tòu)是什麽鬼?

    發生概(gài)率即觸發方式:

    1.剛體速度足夠快,被撞物體的collider足(zú)夠(gòu)薄。

    2.剛體速度(dù)在(zài)一定的v,被撞物體(tǐ)也在一定(dìng)的速(sù)度v(被撞物體可移動)。

    3.暫時未發現的其他情況。

    在分析(xī)這兩種(3種)情況之前,先了解下一個(gè)剛體(rigidbody)屬性(xìng)參數:Collision Detection(碰撞檢測):

    它有三種選項:Discrete(離散),Continuous(連續),Continuous Dynamic(動態連續),我們(men)參考下官方的(de)解釋:

    該屬性用於控製避免高速運動的遊戲對象穿過其(qí)他的對象而未發生碰撞,有三項可供選擇(zé)
    Discrete:離散碰撞器。該模(mó)式與場景(jǐng)中其他的所有碰撞體進行(háng)碰撞檢測。該項(xiàng)為默認值。
    Continuous:連續(xù)碰撞檢測。該模式(shì)用於檢測與動態碰(pèng)撞體(帶有Rididbody)的碰撞,使用(yòng)連續碰撞檢測模式來檢測與網格碰(pèng)撞體(不帶ridigbody)碰撞。(添加一句原文翻譯漏了),Rigidbody設置為連續動態碰撞檢測模式將使用連續碰撞來檢測。其他剛體會采用離散(sàn)碰撞模式。此模式適用於那些需要與采用連續動態檢測的(de)對象相碰撞的對象。這對物理性(xìng)能會有很大影響,如果不需要對快速運動對象(xiàng)進行碰撞檢測(cè),就使用離散碰撞檢測模式。
    Continuous Dynamic:連續動(dòng)態碰(pèng)撞檢測模式,該模(mó)式用於檢測與采(cǎi)用連(lián)續碰(pèng)撞撞模式或連(lián)續
    動態碰撞模式對象的碰撞,也可用於檢測沒有rigidbody的(de)靜態網格碰撞(zhuàng)體。對於(yú)與之碰撞的其他對象可(kě)采用離散碰撞檢測。動態連續碰撞檢測模式也可(kě)用於檢測快(kuài)速運動(dòng)的遊戲物體(tǐ)。
    翻(fān)譯就是這樣的(de)理解並不難:後麵兩項就是為了用來能夠(gòu)檢測到快速運動的物體不至於
    你(nǐ)的void OnCollisionEnter(Collision hit)函數檢測不到,而至於一個為Continuous Dynamic的剛體和一個Discrete的剛體碰撞,前者會使用使用Continous(連續)碰撞(zhuàng),後
    者離散碰(pèng)撞

    再來總(zǒng)結下:當使用默認的離散式碰撞(zhuàng)檢測時,如(rú)果前一楨時對象在牆這一麵,下一楨時(shí)對象已到到了牆另一麵,那麽碰撞檢測(cè)算法將檢測不到碰撞(zhuàng)的(de)發生,你可以(yǐ)將該對象的(de)碰(pèng)撞檢測屬性(xìng)設置為Continuous,這時碰撞檢測算法將會防止對象穿過所有的靜(jìng)態碰撞體,設置為Continuous Dynamic將還會(huì)防止穿過其他也設置為Continuous或(huò)者Continuous Dynamic的剛體(tǐ)。

    這就很好理解(jiě),如果我們的主(zhǔ)角在運(yùn)動中碰到的都是靜態collider,那麽使(shǐ)用離散檢測是可以滿足的。如果我們在(zài)遊戲中,主角將會碰撞到動(dòng)態的collider,那麽檢測模式應該選(xuǎn)擇連續或者連續動態檢測。這樣可以很好的避免穿透現象。

    然後,你以為這樣就高枕勿憂了麽?在實際的項(xiàng)目中,我們可能會發現,我們剛體上已經選擇了連(lián)續檢測甚至連續動態檢測,依舊會有穿透問題,這就是我上麵(miàn)列舉的兩條(3條),被碰撞體(tǐ)的碰撞器太薄,被碰(pèng)撞(zhuàng)體的速度太(tài)快。這(zhè)樣依舊會導致穿透,那麽原理是什麽?我們知道unity中有fixedupdate,update這些更新方法(fǎ),而這(zhè)些更新中,都是有時間間隔更新的,更新的時候是用基礎速度*時間,很有(yǒu)可能這個結果計算(suàn)出來的時(shí)候車已經衝過了(le)被碰撞體,就導致了我們的角色穿透,或者(zhě)卡在被碰撞器的裏(lǐ)麵。

    so,知道了這些,我們在項目中就知(zhī)道如何規避這些“bug”了


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