[英]OnCollisionEnter() not working in Unity3D
我有一個帶有網格碰撞器的對象和一個帶有球體碰撞器的預制件。 如果兩者發生碰撞,我希望預制件的實例被銷毀。
我在腳本中寫了以下內容:
private void OnCollisionEnter(Collision c)
{
if (c == target)
Destroy(transform.gameObject);
print("something"); // Doesn't get printed
}
但它不起作用。 我嘗試在兩個對象上切換isTrigger
。
我有同樣的問題OnCollisionEnter
沒有被調用並發現了這個問題。
對我來說,問題是我正在制作 2D 游戲,所以答案是使用OnCollisionEnter2D
函數。
看看這張表
如果您希望OnCollisionEnter
被調用,請確保:
(a) 兩個物體都有一個對撞機。
(b) 沒有一個對象是觸發碰撞器(這將發出 OnTrigger 函數而不是 OnCollisionEnter)
(c) 其中一個物體(與它們中的哪個無關)是剛性的、非運動學和非靜態的物體(第二個不必是剛體)。
(d) 由於計算困難,MeshCollider 可能很難與其他網格碰撞器發生碰撞,請謹慎使用。
(e) 確保兩個對象在同一層中(或至少它們在場景設置中發生碰撞)。
(f) 如果您在 2d 中工作 - OnCollisionEnter2D
將被調用,請重命名您的函數。
確保其中一個連接了非運動學剛體。 取自 Unity 文檔:
當兩個對撞機發生碰撞時,如果其中至少一個附加了剛體,則會向附加到它們的對象發送三個碰撞消息。 這些事件可以在腳本中處理,並允許您在使用或不使用內置 NVIDIA PhysX 引擎的情況下創建獨特的行為。
從這里: Unity3D MeshCollider
您是否嘗試過使用 OnTriggerEnter() 方法並將對象上的碰撞器設置為觸發器?
如果它不需要告訴它與什么物體發生碰撞,你可以做一個簡單的
void OnTriggerEnter(){
Destroy(transform.gameObject);
}
編輯:
我也做過這樣的 OnCollision
private string hitobject;
void OnCollisionEnter(UnityEngine.Collision hit)
{
hitobject = hit.gameObject.tag;
if(hitobject == "Plane")
{
isgrounded = true;
}
}
沒有一個對象是觸發器,它們不需要剛體來工作。
我有一個類似的問題。 盒子碰撞器沒有碰撞對象那么大。 將 x 和 z 值設置為 2 個單位即可解決問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.