2017-09-15 4 views
0

J'ai une détection si une balle frappe un ennemi qui fait partie d'un script qui est un ennemi:pas détruire des objets assez vite et provoquer une autre collision

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

Le problème est quand une balle frappe un ennemi, son La santé tombe à zéro (à partir de 100) comme si elle avait été touchée plus d'une fois (j'ai aussi vérifié avec Debug.log).

Alors, y a-t-il un moyen de détruire la balle plus rapidement pour qu'elle ne se déclenche plus?

De même, ce script de détection devrait-il être sur l'ennemi ou sur la balle?

+0

au lieu de Destroy (autre) utiliser Destroy (other.gameObject). l'autre est juste une référence de collisionneur pas le gameObject lui-même. – deepankar

+0

Affichez la fonction 'TakeDamage'. En outre, utilisez 'Debug.Log' pour vérifier combien de fois' OnTriggerEnter' est appelé. @deepankar Vous devriez le poster comme une réponse car c'est probablement le problème – Programmer

+0

@Programmer 'TakeDamage' n'est vraiment pas intéressant, la même chose se produit même lorsque je supprime cet appel. J'ai ajouté debug.log et il entre deux fois, même avec 'Destroy (other.gameObject)'. – shinzou

Répondre

3

Au lieu de Destroy(other), utilisez Destroy(other.gameObject). l'autre est juste une référence de collisionneur pas le gameObject lui-même.

Aussi juste pour une bonne pratique au lieu de comparer tag avec == utiliser other.CompareTag(String tagName). C'est moins de mémoire.

+0

Il entre toujours deux fois ... – shinzou

+0

Avez-vous attaché deux collisionneurs à votre objet balle. Ou êtes-vous sûr qu'il y a juste une balle qui frappe l'ennemi. Vous pouvez imprimer InstanceId et vérifier s'ils sont identiques ou différents. – deepankar

+0

utiliser collider.gameObject.GetInstanceID() pour obtenir uniqueId – deepankar