c# - 如何通过名称查找同级游戏对象; Unity2d C#

标签 c# unity-game-engine

我正在尝试开发一个小型 2D Unity 平台游戏,以学习如何使用 Unity 界面。我在尝试让游戏对象跟踪敌人的克隆并跟随它时遇到了问题。其功能是当你将鼠标悬停在敌人克隆上时,它会显示敌人的生命值。但是当我将鼠标悬停在敌人身上时,它会跟踪原始敌人的位置,而不是克隆人的位置。两个游戏对象具有相同的名称。我想要的是 GameObject HoverDataDisplay (如屏幕截图所示) 来跟踪其同级敌人。

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);

}

但是游戏对象(HoverDataDisplay)只跟随原来的敌人。

感谢您的帮助!

最佳答案

在 Unity 中,您可以使用正斜杠 "/" 来查找对象的子对象。由于 parent 的名字不同,您可以这样轻松找到他们:

GameObject.Find("EnemyObject/Enemy");

第二个 HoverDataDisplay:

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

让您的游戏对象使用默认的“克隆”名称并不是一个好主意。实例化后应该重命名,以便于查找。仅当您需要在实例化对象后查找该对象时才执行此操作。


This script is attached to the HoverDataDisplay GameObject

您实际上可以使用 transform.parent 获取它的父对象,即 EnemyObjectEnemyObject(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/

相关文章:

c# - 如何实现 "swapping"列表?

c# - 如何以编程方式恢复备份

c# - 字符串中的C#OR语句。包含

unity-game-engine - 编写一个简单的光线转换着色器

unity-game-engine - 是否有用于在运行时创建图像目标的 AR SDK?

3d - 使用 Unity 3D 是否有任何限制?

unity-game-engine - Unity Build - 最大化时保留窗口

c# - 在iis中启用svg解压

c# - GC.AddMemoryPressure() 不足以按时触发 Finalizer 队列执行

c# - 如何正确加载预制件