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

    Unity3d Rigidbody 碰(pèng)撞穿透

    2018/4/25      點擊:

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

    物理(lǐ)的(de)碰撞當然是基於物理檢測計算,而這個計算是消耗cpu和gpu的,那麽,碰(pèng)撞穿透是什麽鬼?

    發生概率即觸發方式:

    1.剛體速度足夠快,被撞物體的collider足夠薄。

    2.剛體速度在一定的v,被撞物體也在一定的速度v(被撞物體可移動)。

    3.暫時未發(fā)現的其(qí)他情況(kuàng)。

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

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

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

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

    這就很好理解,如果我們的(de)主角在運動中碰(pèng)到(dào)的都是靜態collider,那麽使用離散檢測(cè)是可以滿足的。如(rú)果我們在遊戲中,主角將會碰撞到動態的collider,那麽檢測模式應(yīng)該選擇連續或者連續動(dòng)態檢測。這樣可以很好(hǎo)的(de)避免穿透現象。

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

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


    网站地图 正能量网-传播正能量弘扬主旋律-免费正能量网站www正能量-免费正能量网站www正能量下载在线观看官网