2017-09-15 100 views
0

我有一個檢測,如果子彈擊中敵人,這是一個腳本這是在敵人的一部分:不破壞對象的速度不夠快,造成另一種碰撞

void OnTriggerEnter (Collider other) 
{ 
    if (other.tag == "Bullet") { 
     Destroy (other); // or Destroy (other, 0); 
    } 
} 

問題是,當子彈擊中敵人,其健康下降到零(從100),就好像它不止一次點擊一樣(我也使用Debug.log進行了檢查)。

那麼有沒有辦法讓子彈更快地摧毀,以免再次觸發?

此外,這個檢測腳本應該是敵人還是子彈?

+0

而不是Destroy(其他)使用Destroy(other.gameObject)。其他只是一個碰撞引用而不是實際的gameObject本身。 – deepankar

+0

發佈TakeDamage功能。另外,使用'Debug.Log'來檢查'OnTriggerEnter'被調用的次數。 @deepankar你應該將其作爲答案發布,因爲這可能是問題 – Programmer

+0

@Programmer'TakeDamage'確實不是很有趣,即使我刪除了這個調用,也會發生同樣的情況。我添加了debug.log,並且它進入了兩次,即使使用了'Destroy(other.gameObject)'。 – shinzou

回答

3

而不是Destroy(other)使用Destroy(other.gameObject)。其他只是一個碰撞引用而不是實際的gameObject本身。

也只是爲了好的做法,而不是比較標記與==使用other.CompareTag(String tagName)。它的內存消耗更少。

+0

它仍然輸入兩次... – shinzou

+0

你是否將兩個碰撞器連接到了你的子彈對象。或者你確定只有一顆子彈擊中敵人。您可以打印InstanceId,並檢查它們是否相同或不同。 – deepankar

+0

使用collider.gameObject.GetInstanceID()獲得唯一標識 – deepankar