如何通过名称找到兄弟游戏对象; Unity2d c#

时间:2017-07-07 23:50:40

标签: c# unity3d

我正在尝试开发一个小型的2D Unity平台,以学习使用Unity的界面。我一直在尝试制作一个游戏对象跟踪敌人的克隆并跟随它。当你将鼠标悬停在敌人的克隆上时,它的功能就是如此,它可以显示敌人的健康状况。但是当我盘旋在敌人身上时,它会跟踪原始敌人的位置,而不是克隆人的位置。两个游戏对象都有相同的名称。我想要的是GameObject HoverDataDisplay (如截图所示)来追踪它的兄弟,Enemy。

Hierarchy view of Enemy and clone.

我对跟踪脚本的当前代码如下所示:

        private GameObject Enemy;

void Start() {

    Enemy = GameObject.Find ("Enemy");
}

void Update(){
    transform.position = new Vector3 (Enemy.transform.position.x - 0.57f, Enemy.transform.position.y + 1.5f, Enemy.transform.position.z);

}

但GameObject(HoverDataDisplay)只跟随原始敌人。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

在Unity中,您可以使用正斜杠"/"来查找对象的子级。由于父母的名字不同,你可以很容易地找到它们:

GameObject.Find("EnemyObject/Enemy");

第二个HoverDataDisplay:

GameObject.Find("EnemyObject(Clone)/Enemy");

让GameObject使用默认的“克隆”名称并不是一个好主意。您应该在实例化它之后重命名它,以便它很容易找到。只有在实例化后需要找到Object时才执行此操作。

  

此脚本附加到HoverDataDisplay GameObject

您实际上可以使用transform.parent获取它的父对象,它是 EnemyObject EnemyObject(克隆),然后使用FindChild查找敌人对象。

//First, Find the Parent Object which is either EnemyObject or EnemyObject(Clone)
Transform parent = transform.parent;

//Now, Find it's Enemy Object
GameObject enemy = parent.FindChild("Enemy").gameObject;

我建议您使用此方法而不是我提到的第一个方法。提到第一个,以便您知道它可以完成。

修改

Transform.FindChild现已弃用。您可以使用Transform.Find执行相同的操作。

答案 1 :(得分:0)

您可以获得父母的参考,然后搜索父母的孩子

    // get a reference to the rb of the parent
    parentRigidbody = gameObject.GetComponentInParent<Rigidbody>();

    // a reference to the camera in a sibling object
    playerCam = rigRigidbody.gameObject.GetComponentInChildren<Camera>();