2017-10-13 6 views
0

J'ai nGameObjects qui sont les enfants d'une mère GameObject.Laisser Child GameObject se détruire Issue

Chaque enfant a son propre script enfant joint. Si je clique sur un objet enfant, TOUS les enfants répondent. Lorsque l'enfant est chargé, il se place sous le parent et je passe également un numéro pour que je puisse le suivre plus tard si je le souhaite.

Voici mon script. Il n'y a vraiment pas grand-chose. Quelqu'un sait ce que je fais mal?

public GameObject parentGameObject; 
public int childIndex; 

void Start() { 
    transform.parent = parentGameObject.transform; 
} 

void Update() { 
    if (Input.GetMouseButton(0)) { 
     Die(); 
    } 
} 

public void Die() { 
    Debug.Log("Child " + this.childIndex + " clicked"); 
    Destroy(this.gameObject); 
} 
+2

Votre code dans les contrôles de la fonction mise à jour si vous avez cliqué sur le bouton de la souris pas si vous avez cliqué sur un gameobject. Il est donc normal qu'ils répondent tous. – CNuts

+0

Je suppose que je suis confus @CNuts le je dois savoir quand le bouton de la souris est cliqué. 'Die()' contient l'objet gameobject. –

+0

ryeMoss réponse est à peu près comment vous êtes censé le faire. – CNuts

Répondre

2

Ce script est attaché à tous vos objets enfants, ils sont tous les contrôles pour voir si la souris est cliqué, et donc tout se détruire quand un simple clic de souris est détectée (depuis un clic de souris est détectée dans tous les scénario).

Je suggère d'avoir un script dans l'objet gameobject mère qui utilise un Raycast et attache Colliders et étiqueter chaque enfant pour détecter quand l'un d'eux est cliqué, puis détruire l'objet cliqué correspondant.

On ne sait pas si vous êtes en 2D, mais l'exemple pour ce serait comme si:

void Update() 
{ 
    if (Input.GetMouseButtonDown(0)) 
    { 
     // cast a ray at the mouses position into the screen and get information of the object the ray passes through 
     RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); 
     if (hit.collider != null && hit.collider.tag == "child") //each child object is tagged as "child" 
     { 
      Destroy(hit.collider.gameObject); 
     } 
    } 
}