2016-03-01 4 views
-1

J'ai l'objet "Unité" avec sous objets "Monstre et Santé J'ai aussi Object Tower qui a un collisionneur de sphères J'ai aussi la fonction OnTriggerEnter (Collider co) dans l'objet Tour qui détecte unité.Obtenir objet enfant de gameObject dans l'unité

Quand il fait que je peux par exemple imprimer le nom « unité » en y accédant co.gameObject.name, ou même co.name, que je suppose est le même.

Mais comment puis-je obtenir le premier sous-objet de l'unité par exemple, je veux dire l'objet Monster, mais pas par son nom mais seulement le PREMIER SOUS-OBJET de l'objet Unité?

MISE À JOUR

En utilisant ce code:

void OnTriggerEnter(Collider co) 
{ 
    Debug.Log(co.gameObject.transform.GetChild(0)); 
} 

provoque une exception:

UnityException: Transform child out of bounds 
Tower.OnTriggerEnter (UnityEngine.Collider co) (at Assets/Scripts/Tower.cs:19) 

MISE À JOUR 2 impression (co.transform.childCount); donne 2

Et c'est la cause correcte je

Unit 
> 

Monster 

HealthBar 

sous-objets

Mise à jour 3 Code Tour. en utilisant UnityEngine; en utilisant System.Collections;

public class Tower : MonoBehaviour 
{ 
    // The Bullet 
    public GameObject Bullet; 

    // Rotation Speed 
    public float rotationSpeed = 35; 

    void Update() 
    { 
     transform.Rotate(Vector3.up * Time.deltaTime * rotationSpeed, Space.World); 
    } 

    void OnTriggerEnter(Collider co) 
    { 

     print(co.transform.childCount); 

     if (co.gameObject.name == "Unit(Clone)") 
     { 

      GameObject g = (GameObject)Instantiate(Bullet, transform.position, Quaternion.identity); 
      g.GetComponent<Bullet>().target = co.transform; 
     } 
    } 
} 

Ce Code permet de gérer une certaine façon d'imprimer deux fois

2 
UnityEngine.MonoBehaviour:print(Object) 
Tower:OnTriggerEnter(Collider) (at Assets/Scripts/Tower.cs:20) 
0 
UnityEngine.MonoBehaviour:print(Object) 
Tower:OnTriggerEnter(Collider) (at Assets/Scripts/Tower.cs:20) 
+0

Hors limites signifie qu'il n'y a pas d'enfants dans la transformation. Vous devrez vérifier cela en premier. Voir http://docs.unity3d.com/ScriptReference/Transform-childCount.html –

+0

J'ai vérifié et je reçois 2 ce qui signifie que j'ai vraiment deux sous-objets. Que puis-je faire maintenant ? – David

+0

Êtes-vous sûr de travailler avec gameobject correct? co dans OnTriggerEnter (Collider co) est l'entité entrante. Montrez-nous tout votre code. –

Répondre

1

Vous devez fonctionner sur transform de gameobject. Vous pouvez utiliser la fonction Transform.GetChild(int index).

Vous devrez probablement d'abord vérifier s'il y a des enfants car GetChild lève des exceptions si vous êtes hors des limites du tableau. Pour cela, vous devrez utiliser Transform.childCount.

Plus d'informations peuvent être trouvées ici:

http://docs.unity3d.com/ScriptReference/Transform.GetChild.html http://docs.unity3d.com/ScriptReference/Transform-childCount.html

+0

vérifier la mise à jour s'il vous plaît. – David

+0

Cela a fonctionné. problème était avec l'objet de balle qui, en second lieu appelé impression. Un grand merci pour l'aide! – David