Unity-網(wǎng)格碰撞體
網(wǎng)格碰撞體 (Mesh Collider)?采用網(wǎng)格資源并基于該網(wǎng)格構(gòu)建其碰撞體。在進(jìn)行碰撞檢測(cè)時(shí),Mesh Collider 比使用復(fù)雜網(wǎng)格的基元更準(zhǔn)確。標(biāo)記為?Convex?的 Mesh Collider 可與其他 Mesh Collider 發(fā)生碰撞。

屬性
屬性????????????????????????????????????????????功能
Convex選中此復(fù)選框?qū)⑹?Mesh Collider 與其他 Mesh Collider 發(fā)生碰撞。
Convex?Mesh Collider 最多 255 個(gè)三角形。
Is Trigger選中此復(fù)選框?qū)⑹?Unity 使用該碰撞體來(lái)觸發(fā)事件,而物理引擎會(huì)忽略該碰撞體。
Cooking Options啟用或禁用影響物理引擎對(duì)網(wǎng)格處理方式的網(wǎng)格烹制選項(xiàng)。
None禁用下方列出的所有?Cooking Options。
Everything啟用下方列出的所有?Cooking Options。
Cook for Faster Simulation使物理引擎烹制網(wǎng)格以加快模擬速度。啟用此設(shè)置后,這會(huì)運(yùn)行一些額外步驟,以保證生成的網(wǎng)格對(duì)于運(yùn)行時(shí)性能是最佳的。這會(huì)影響物理查詢和接觸生成的性能。禁用此設(shè)置后,物理引擎會(huì)使用更快的烹制速度,并盡可能快速生成結(jié)果。因此,烹制的 Mesh Collider 可能不是最佳的。
Enable Mesh Cleaning使物理引擎清理網(wǎng)格。啟用此設(shè)置后,烹制過(guò)程會(huì)嘗試消除網(wǎng)格的退化三角形以及其他幾何瑕疵。此過(guò)程生成的網(wǎng)格更適合于在碰撞檢測(cè)中使用,往往可生成更準(zhǔn)確的擊中點(diǎn)。
Weld Colocated Vertices使物理引擎在網(wǎng)格中刪除相等的頂點(diǎn)。啟用此設(shè)置后,物理引擎將合并具有相同位置的頂點(diǎn)。這對(duì)于運(yùn)行時(shí)發(fā)生的碰撞反饋十分重要。
Use Fast Midphase使物理引擎采用可用于您輸出平臺(tái)的最快速的中間階段加速結(jié)構(gòu)和算法。啟用此選項(xiàng)后,物理引擎將使用更快的算法,這個(gè)算法不需要任何 R 樹(shù) (R-Trees) 即可進(jìn)行空間訪問(wèn)。如果在某些平臺(tái)上的運(yùn)行時(shí)遇到中間階段問(wèn)題,您仍然可以禁用此選項(xiàng),從而改用較慢的舊版中間階段算法。Material引用物理材質(zhì),可確定該碰撞體與其他對(duì)象的交互方式。
Mesh引用需要用于碰撞的網(wǎng)格。
詳細(xì)信息
Mesh Collider 從附加到游戲?qū)ο蟮木W(wǎng)格構(gòu)建其碰撞表示,并讀取附加的變換組件的屬性以正確設(shè)置其位置和縮放。這樣做的好處是可以使碰撞體的形狀與游戲?qū)ο罂梢?jiàn)網(wǎng)格的形狀完全相同,從而產(chǎn)生更精確和真實(shí)的碰撞。但是,伴隨這種精度的不足之處是,與涉及原始碰撞體(例如球體、盒體和膠囊體)的碰撞相比,處理開(kāi)銷會(huì)更高,因此最好謹(jǐn)慎使用 Mesh Collider。
碰撞網(wǎng)格中的面為單面。這意味著,游戲?qū)ο罂蓮囊粋€(gè)方向穿過(guò)這些面,但從另一個(gè)方向會(huì)與這些面碰撞。
如需了解網(wǎng)格碰撞體 (Mesh Collider) 使用的基礎(chǔ)算法和數(shù)據(jù)結(jié)構(gòu)的詳細(xì)信息,請(qǐng)參閱?PhysX 文檔。
網(wǎng)格烹制
網(wǎng)格烹制將常規(guī)網(wǎng)格更改為可以在物理引擎中使用的網(wǎng)格。烹制會(huì)構(gòu)建用于物理查詢的空間搜索結(jié)構(gòu)(如?Physics.Raycast)以及用于接觸生成的支持結(jié)構(gòu)。Unity 在碰撞檢測(cè)中使用網(wǎng)格之前烹制所有這些網(wǎng)格。這可在導(dǎo)入時(shí) (Import Settings > Model > Generate Colliders) 或運(yùn)行時(shí)進(jìn)行。
如果要在運(yùn)行時(shí)生成網(wǎng)格(例如,對(duì)于程序化表面),設(shè)置?Cooking Options?以更快地生成結(jié)果并禁用清理過(guò)程的其他數(shù)據(jù)清理步驟將非常有用。缺點(diǎn)是需要生成無(wú)退化三角形和非同位頂點(diǎn),但烹制的運(yùn)行速度更快。
如果禁用?Enable Mesh Cleaning?或?Weld Colocated Vertices__,則需要確保未使用那些算法在其他情況下可能會(huì)過(guò)濾的數(shù)據(jù)。如果禁用了?Weld Colocated Vertices__,請(qǐng)確保沒(méi)有任何同位頂點(diǎn),如果啟用了 __Enable Mesh Cleaning__,確保沒(méi)有面積接近零的小三角形,沒(méi)有狹長(zhǎng)的三角形,也沒(méi)有面積接近于無(wú)限大的大三角形。
注意:將?Cooking Options?設(shè)置為除默認(rèn)設(shè)置之外的任何其他值時(shí),意味著 Mesh Collider 必須使用一個(gè)?isReadable?值為?true
?的網(wǎng)格。
限制
使用 Mesh Collider 時(shí)有一些限制:
具有 Rigidbody 組件的游戲?qū)ο髢H支持啟用了?Convex?選項(xiàng)的網(wǎng)格碰撞體 (Mesh Collider):物理引擎只能模擬凸面網(wǎng)格碰撞體。
要使 Mesh Collider 正常工作,網(wǎng)格必須在以下情況下設(shè)置為 read/write enabled:
Mesh Collider 的變換組件具有負(fù)縮放(例如 (–1, 1, 1))并且網(wǎng)格為凸面。
Mesh Collider 的變換組件是傾斜或截?cái)嗟模ɡ?,?dāng)旋轉(zhuǎn)的變換組件具有縮放的父變換組件時(shí))。
Mesh Collider 的?Cooking Options?標(biāo)志設(shè)置為默認(rèn)值以外的任何值。
不應(yīng)修改用于碰撞體的網(wǎng)格幾何體,因?yàn)槊看胃木W(wǎng)格時(shí),物理引擎都必須重建內(nèi)部網(wǎng)格碰撞加速結(jié)構(gòu)。這會(huì)導(dǎo)致大量的性能開(kāi)銷。對(duì)于需要在運(yùn)行時(shí)發(fā)生碰撞和進(jìn)行更改的網(wǎng)格,通常最好使用諸如膠囊體、球體和盒體之類的原始碰撞體來(lái)模擬網(wǎng)格形狀。
優(yōu)化技巧:__如果 Mesh Collider 僅使用網(wǎng)格,則可以在?Import Settings__ 中禁用 __Normals__,因?yàn)槲锢硐到y(tǒng)不需要它們。