unity2D剛體移動速度過快會穿越其他碰撞體,不產生碰撞效果怎么辦?


此問題是在做特殊關卡遇到的,一個可以移動的碰撞體如果速度過快會穿過另一個碰撞體,慢的話是可以的,問題原因找到了,只需要一個設置就行

對於Unity引擎而言,是可以直接解決這個問題的。

Unity的Rigidbody里有個Collision Detection的碰撞檢測屬性。
該屬性有三個選項:Discrete(離散), Continuous(連續), Continuous Dynamic(動態連續)。

其中的Discreet一詞應為筆誤,實為Discrete(Discreet意為慎重,兩者意思相差很大)。整個Manual里沒有第二處用到Discreet的地方,也沒有任何官方說明提到該詞。
翻譯過來基本上就是

碰撞檢測屬性:用於防止快速移動的物體穿過其他物體而不觸發碰撞檢測。

離散(Discrete):
- 碰撞體在遇到本場景其他碰撞體時使用離散式碰撞檢測(Discrete)。
- 其他碰撞體在遇到它時會使用離散式碰撞檢測(Discrete)。
- 用於正常碰撞。(這是默認值)

連續(Continuous):
- 碰撞體在遇到其他動態碰撞體(即包含rigidbody)使用離散式碰撞檢測(Discrete),在遇到靜態MechColliders(即不含rigidbody)時使用連續式碰撞檢測(Continuous)。
- 設為動態連續(Continuous Dynamic)的碰撞體在遇到該物體時使用連續式碰撞檢測(Continuous), 其他碰撞體在遇到該物體時使用離散式碰撞檢測(Discrete)。
- 用於設定被動態連續(Continuous Dynamic)的物體所碰撞的物體。(會影響物理引擎的性能表現。如果你沒有快速運動物體的碰撞問題,就乖乖設為離散吧)

動態連續(Continuous Dynamic):
- 碰撞體在遇到其他設為連續(Continuous)或動態連續(Continuous Dynamic)的物體時使用連續式碰撞檢測(Continuous)。在遇到靜態MeshColliders(即不含rigidbody)時也使用連續式的碰撞檢測。遇到其他碰撞體則使用離散式碰撞檢測(Discrete)。
- 用於快速運動的物體。

理成一個碰撞檢測屬性與碰撞檢測方式的對應表格就是:

 

如果你有一個快速運動的小球,它會穿過一個靜態的牆,那么將球設為Continuous即可解決問題。
但如果你有多個這樣的小球,它們之間則依舊會遇到互相穿過對方的問題,那么將球都設為Continuous Dynamic更好。


所以遇到題主的問題時,將快速運動的物體設為Continuous/Continuous Dynamic即可。


理論上你可以設定所有物體為Continuous Dynamic,然而這樣的物體數量一旦增加起來,對性能會有很大的影響。 

 

因為我這是2D,只有一個Continuous屬性, 選擇后在運行,OK,沒問題了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM