2013-12-13 44 views
7

我檢查了幾乎所有的答案,但這些大多是簡單的錯誤和錯誤。 我的問題是OnCollisionEnter即使在碰撞其他剛體時也不會被調用。OnCollisionEnter不統一呼叫

這裏是不會被調用的部分:不

void OnCollisionEnter(UnityEngine.Collision col) { 
     Debug.Log("collision!!!"); 
     foreach(ContactPoint contact in col.contacts) { 
      //checking the individual collisions 
      if(contact.Equals(this.target)) 
      { 
       if(!attacking) { 
        Debug.Log("hitting target"); 
       } else { 
        Debug.Log("dying"); 
        //engage death sequence 
       } 
      } 
     } 
    } 

即使是「碰撞!!!」信息出現。我是否理解錯誤的用法,或者我忘記了什麼?

+0

也附加到對象的組件: 變換;精靈渲染器;盒子對撞機2D;圓形對撞機2D;敵方控制者(劇本);剛體2D;動畫; –

+1

請[編輯您的帖子](http://stackoverflow.com/posts/20567692/edit)添加此信息,不要將它添加爲註釋,因爲它可能會丟失 – Dave

+0

OnCollisionEnter將不會被調用,如果你'使用characterController。這是它自己的碰撞方法(我目前無法查看它來鏈接它)。 –

回答

32

您是否使用2D撞機和剛體??。如果是這樣使用這個函數而不是OnCollisionEnter

void OnCollisionEnter2D(Collision2D coll) 
    { 
     Debug.Log(coll.gameObject.tag); 

    } 
+0

非常感謝你! – Torch2424

+0

非常感謝你......! – dharmesh

1

您需要確保碰撞矩陣(編輯 - >項目設置 - >物理)不排除您的對象所屬圖層之間的衝突。

Unity Docs

你還需要確保其他對象有:對撞機,剛體和對象本身或者這些組件都沒有禁用。

+4

我做到了,最後我發現對於2D碰撞,您需要使用OnCollisionEnter2D(Collision2D col)方法。 –

+0

也是這樣:D – Alex

1

這裏是我做的:

  1. 確保對象要碰撞的目標有非剛體運動和網格對撞機。我的擊球對象是一個立方體,只是將其對撞機改爲網格對撞機
  2. 在網格colider inspector上,確保啓用了凸面。請參閱更多網眼碰撞檢測器細節here

現在您的OnCollisionEnter工作。我希望這可以幫助你。

0

因爲您錯誤輸入了參數的類名稱。這使得沒有錯誤也不起作用。 如:

OnCollisionEnter(Collider other) //this is wrong 
OnCollisionEnter(Collision other) //this is correct 
0

你只需要連接的腳本相同的對象,其需要檢測碰撞。