将gameObject的子对象统一起来

时间:2016-03-01 10:49:08

标签: unity3d gameobject subobject

我有Object" Unit"与子对象"怪物和健康。 我也有对象塔,有球体对撞机。 此外,我在Tower Object中有OnTriggerEnter(Collider co)函数来检测Unit。

如果可以,我可以打印名称" Unit"通过访问它 co.gameObject.name,甚至是co.name,我猜是相同的。

但是我怎样才能获得单位的第一个子对象。我的意思是怪物对象,但不是名字,而只是单位对象的第一个子对象?

更新

使用此代码:

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 个答案:

答案 0 :(得分: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