簡體   English   中英

OnCollisionEnter() 在 Unity3D 中不起作用

[英]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將被調用,請重命名您的函數。

示例 colider 配置

確保其中一個連接了非運動學剛體。 取自 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM