0

我有带有子对象“怪物和健康”的对象“单元”。我还有带有球体对撞机的对象塔。此外,我在塔对象中有 OnTriggerEnter(Collider co) 函数来检测单元。

例如,当它出现时,我可以通过访问 co.gameObject.name 或什至 co.name 来打印名称“Unit”,我猜这是相同的。

但是,例如,我怎样才能获得 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)
4

1 回答 1

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

于 2016-03-01T10:53:23.447 回答