2017-05-17 825 views
1

访问游戏物体在团结,它提供了一个函数来获取游戏对象如何通过实例ID在Unity

GetInstanceID() 

的实例,同时实例ID可能会有所不同GameObjects,但功能的实例ID

得到游戏物体
InstanceIDToObject() 

仅在EditorUtility中提供,不能在发行版中使用。

据我所知,使用HashTable也许是一种方法来达到这一点,但在这里是否有任何其他方法来实现呢?

+0

这可能是唯一可行的办法是通过反射但是这不值得由于性能方面的原因。坚持'HashTable'或'Dictionary'。 – Programmer

回答

5

解决方案可以在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; 

我也有一个哈希表和使用的实例ID作为哈希表键,以便访问每个对象。你可以自己通过并为对象分配一个标识符,但是因为每个对象都有一个唯一的InstanceID(),所以如果情况需要它,也可以使用它。

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

+2

这应该被接受为答案。然而,你不应该找到一个对象,如果你的代码中有太多的发现,那么它就是一个糟糕的性能问题。如果你必须,考虑FindWithTag,它会更快,只要你不把太多的对象放在同一个标​​签上。一般来说,保持你可以找到的东西的参考。 – Farhan