Получение дочернего объекта gameObject в единстве

У меня есть Объект "Юнит" с подобъектами "Монстр и Здоровье". У меня также есть Башня Объектов, у которой есть сферический коллайдер. Также у меня есть функция OnTriggerEnter(Collider co) в Башенном Объекте, которая обнаруживает Юнит.

Когда это произойдет, я, например, смогу напечатать имя "Unit", открыв для него co.gameObject.name или даже co.name, что, я думаю, тоже самое.

Но как я могу получить первый подобъект объекта, например. Я имею в виду объект Monster, но не по имени, а просто ПЕРВЫЙ СУБЪЕКТ объекта Unit?

ОБНОВИТЬ

Используя этот код:

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

Вызывает исключение:

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

ОБНОВЛЕНИЕ 2 печати (co.transform.childCount); дает 2

И это правильно, потому что у меня есть

Unit
>

Monster

HealthBar

субобъекты

Обновите 3 кода Башни. используя UnityEngine; использование 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;
        }
    }
}

Этот код почему-то удается напечатать дважды

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)

1 ответ

Решение

Вам придется работать с GameObject transform, Ты можешь использовать Transform.GetChild(int index) функция.

Возможно, вам сначала нужно проверить, есть ли дочерние элементы, потому что GetChild выдает исключения, если вы выходите за пределы массива. Для этого вам придется использовать Transform.childCount,

Более подробную информацию можно найти здесь:

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

Другие вопросы по тегам