• Unity3d Rigidbody 碰撞穿透

    2018/4/25      點擊(jī):

    首先,說說碰撞的(de)條(tiáo)件(jiàn):1.rigidbody(剛體(tǐ)),一般用在主動移動的(de)物體上,比(bǐ)如角色。2.collider,碰撞器,一般用於受力(lì)物體上,比如障礙塊。

    物理的碰撞當(dāng)然是基於物理檢測計(jì)算,而這個(gè)計(jì)算是消耗cpu和gpu的,那(nà)麽,碰撞穿透是什(shí)麽(me)鬼?

    發生概率即觸發方式:

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

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

    3.暫時未發(fā)現的其他情況。

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

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

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

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

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

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

    so,知道了這些,我們在項(xiàng)目中就知道如(rú)何規(guī)避這些“bug”了


    91影视免费版下载-91麻豆国产福利精品-91麻豆精品一二三区在线-国产91系列视频在线观看