Получение дочернего объекта 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