如何在Unity中通过实例id访问GameObject

dea*_*ton 2 unity-game-engine unityscript

在Unity中,它提供了获取GameObject实例的函数

GetInstanceID ()
Run Code Online (Sandbox Code Playgroud)

虽然实例ID可以与游戏对象不同,但是通过实例ID获取游戏对象的函数

InstanceIDToObject()
Run Code Online (Sandbox Code Playgroud)

仅在EditorUtility中提供,在release中无法使用。

据我认为,使用HashTable可能是实现这一目标的一种方法,但是还有其他方法可以实现这一目标吗?

小智 6

解决方案可以在Unity论坛上找到,为了方便我引用一下。

不直接,但您可以使用 InstanceID 重命名该对象,然后使用 InstanceID 执行 GameObject.Find 来以这种方式访问​​该对象。

gameObject.name = GetInstanceID().ToString();
var foo = 38375; // A made-up InstanceId...in actual code you'd get this from a real object...you can store the instance ids in an array or something
GameObject.Find(foo.ToString()).transform.position = whatever;
Run Code Online (Sandbox Code Playgroud)

我还有一个哈希表,并使用实例 id 作为哈希表的键来访问每个对象。您可以自己检查并为对象分配一个标识符,但由于每个对象无论如何都有一个唯一的 InstanceID(),因此如果情况需要,也可以使用它。

来源:https ://forum.unity3d.com/threads/can-i-use-instanceid-to-access-an-object.12817/

  • 这应该被接受为答案。但是,您永远不必查找对象,如果代码中查找的对象太多,性能会受到严重影响。如果必须,请考虑 FindWithTag,它会更快,前提是您不要在太多对象上放置相同的标签。一般来说,保留您可能需要找到的内容的参考。 (2认同)
  • 不,它不应该被接受为答案,因为它没有回答问题,这是一种需要您重命名对象的解决方法。正确的答案不需要这样。 (2认同)