2017-05-05 100 views
2

我想要一個帶有「Bullet」標籤的子彈項目擊中此代碼所附的目標。我在觸發器上勾選了項目符號。碰撞正在對目標起作用,因爲我可以與玩家一起擊中目標。任何幫助將不勝感激。OnTriggerEnter Unity c#觸發器沒有註冊

void OnTriggerEnter(Collider other) 
{ 

    if (other.gameObject.CompareTag("Bullet")) 
    { 
     Debug.Log ("Hit!"); 
     Destroy(this); 
    } 
} 
+2

幫助解決實際錯誤更容易。你試過什麼了?您的代碼示例不完整,請檢查[MCVE] – bradbury9

+0

您確定**對撞器**設置爲_Trigger_?你是否確定你的子彈不是太快,並且從一個幀到另一個幀? – Kardux

+0

我會根據使用情況改用彈道學庫或簡單的raycasts – Anders

回答

2

子彈(碰撞檢測類型 - discrete)旅遊快速將經過一個靜態牆無需註冊OnTriggerEnter(一個簡單的框撞機或網狀撞機它不是因爲沒有剛體動態對象)。

連續碰撞檢測:要解決此問題,我們可以將碰撞檢測類型更改爲continuous作爲項目符號。子彈碰撞檢測將變爲continuous,即使在高速情況下也不會錯過牆壁。

Collision Detection Setting in RigidBody component

連續動態碰撞檢測:此外,如果我們想要子彈擊中一個動態對象(具有剛體,如移動的敵方角色),那麼我們就需要這兩個對象設定爲Continuous碰撞檢測以及這些對象中的至少一個到Continuous Dynamic碰撞檢測。

+0

非常感謝,您爲我省去了很多摸索:) –

+0

歡迎您!請接受答案,讓其他人知道它的正確解決方案。 –