我正在尝试开发一个小型 2D Unity 平台游戏,以学习如何使用 Unity 界面。我在尝试让游戏对象跟踪敌人的克隆并跟随它时遇到了问题。其功能是当你将鼠标悬停在敌人克隆上时,它会显示敌人的生命值。但是当我将鼠标悬停在敌人身上时,它会跟踪原始敌人的位置,而不是克隆人的位置。两个游戏对象具有相同的名称。我想要的是 GameObject HoverDataDisplay (如屏幕截图所示) 来跟踪其同级敌人。
我的跟踪脚本的当前代码如下所示:
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);
}
但是游戏对象(HoverDataDisplay)只跟随原来的敌人。
感谢您的帮助!
最佳答案
在 Unity 中,您可以使用正斜杠 "/"
来查找对象的子对象。由于 parent 的名字不同,您可以这样轻松找到他们:
GameObject.Find("EnemyObject/Enemy");
第二个 HoverDataDisplay:
GameObject.Find("EnemyObject(Clone)/Enemy");
让您的游戏对象使用默认的“克隆”名称并不是一个好主意。实例化后应该重命名,以便于查找。仅当您需要在实例化对象后查找该对象时才执行此操作。
This script is attached to the HoverDataDisplay GameObject
您实际上可以使用 transform.parent
获取它的父对象,即 EnemyObject 或 EnemyObject(Clone),然后使用 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
来完成同样的事情。
关于c# - 如何通过名称查找同级游戏对象; Unity2d C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44981122/