Unity3d Rigidbody 碰撞穿透
首先,說說(shuō)碰(pèng)撞的條件:1.rigidbody(剛體(tǐ)),一般用在主動移動的物體上,比如角色。2.collider,碰(pèng)撞器,一般用於受(shòu)力物體(tǐ)上,比如障礙塊。
物理的碰撞當然是(shì)基於物理檢測計算(suàn),而這個(gè)計算是消耗cpu和gpu的(de),那麽,碰撞穿透是什麽(me)鬼?
發生概率即觸發方式:
1.剛體速度足夠快(kuài),被撞物體(tǐ)的collider足夠薄。
2.剛體速度在(zài)一定的v,被撞物體也在一定的速度v(被撞物體可(kě)移動)。
3.暫時未發現的其他情況。
在分析這兩種(3種)情況(kuàng)之(zhī)前,先了解下一個剛體(rigidbody)屬性參(cān)數:Collision Detection(碰撞檢測):
它有三種選項:Discrete(離散),Continuous(連續),Continuous Dynamic(動態連續),我們參考(kǎo)下官方的解釋:
該屬性用於控製避免高速運(yùn)動的遊戲對象穿過其他的對象而未發生碰撞,有三項可供選擇
Discrete:離散碰撞器(qì)。該模式與場景中其他的所有碰撞(zhuàng)體進行碰撞檢測。該項為(wéi)默認值。
Continuous:連續碰撞檢(jiǎn)測(cè)。該模式(shì)用於檢測(cè)與動態碰撞體(帶有Rididbody)的碰撞,使用連續碰撞檢測模式來檢測與網格碰撞體(不帶ridigbody)碰撞。(添加(jiā)一句原文翻譯漏了),Rigidbody設置為連續動態碰撞檢測模式將使用連續碰撞來檢測。其他剛體會采用離(lí)散碰撞(zhuàng)模式(shì)。此模式適(shì)用(yòng)於(yú)那些需要與采用連續動態檢測的對象相碰撞的對象。這對物理性能會有很大(dà)影響,如果不需要對快(kuài)速運動對象進行碰撞(zhuàng)檢測,就使用離散碰撞檢測模式。
Continuous Dynamic:連續動態碰撞檢測模式,該模式用於檢測與采(cǎi)用連續碰撞撞模式或連續
動態碰撞(zhuàng)模式對(duì)象的碰撞,也可用於檢測沒有rigidbody的(de)靜態網格碰撞體。對於與之碰撞的其他(tā)對象可采用離散碰撞檢測。動態連(lián)續碰撞檢測模式也可用於檢測快速運動的遊戲物(wù)體。
翻譯就是這樣的理解並不難:後麵(miàn)兩項就是(shì)為了用來(lái)能夠檢測到快速運動的物體不(bú)至(zhì)於
你的(de)void OnCollisionEnter(Collision hit)函數檢(jiǎn)測不到,而至於一個為(wéi)Continuous Dynamic的剛體和一個Discrete的(de)剛體碰撞,前者會使用使用Continous(連續)碰撞,後
者離散碰(pèng)撞
再來總結(jié)下:當使用默認的離散式碰撞檢(jiǎn)測時,如果前一楨時對(duì)象在牆這一麵,下一楨時對象已到到了牆(qiáng)另一麵,那麽碰撞檢測算法將檢測不到碰撞的發生,你可以將該對象的碰撞檢測屬性設置為Continuous,這時碰撞檢測算法將會防止(zhǐ)對象穿過(guò)所有的靜(jìng)態碰撞體,設置為Continuous Dynamic將(jiāng)還會防止穿(chuān)過其他也設置為Continuous或者Continuous Dynamic的剛體。
這就很好理解(jiě),如果(guǒ)我們的主角在運動中(zhōng)碰到的都是靜態collider,那麽(me)使用離散檢測是可以滿(mǎn)足的。如果我們在(zài)遊戲中,主角將(jiāng)會碰撞到動態的collider,那(nà)麽檢測(cè)模式應該選擇連(lián)續或者連續動態檢測。這樣可(kě)以很好的避免穿透(tòu)現象。
然後,你以為這樣就高枕勿憂了麽?在實際的(de)項目中,我(wǒ)們可能會發現,我們剛(gāng)體上已經選擇了連續檢(jiǎn)測甚至連續動態(tài)檢測,依舊會有穿透問題,這就是我上(shàng)麵列舉的兩條(3條),被碰撞(zhuàng)體的碰撞器太薄,被碰(pèng)撞體的速度太快。這樣依舊會導致穿透,那麽原理是什麽?我們知道unity中有fixedupdate,update這些更新方法,而這些更新中,都是有時間間隔更新的,更新(xīn)的時候是用基礎速度*時間,很有可能這(zhè)個結果計(jì)算出來(lái)的時候車已(yǐ)經衝過了(le)被碰(pèng)撞體,就(jiù)導致了我們的角色穿透(tòu),或者(zhě)卡在被碰撞器的裏麵。
so,知道了這些,我們在項目中就知道如(rú)何規避這些“bug”了
- 上一篇:VS2010中配(pèi)置Openframework 2018/4/26
- 下一篇:wonglove力反饋器支持(chí)UNITY3D開發 2018/4/23