在Unity中,它提供了一个函数来获取GameObject的实例
GetInstanceID ()
虽然实例 ID 可能与游戏对象不同,但通过实例 ID 获取游戏对象的函数
InstanceIDToObject()
仅在编辑器实用程序中提供,不能在发行版中使用。
据我所知,使用HashTable也许是一种实现这一目标的方法,但是这里没有其他方法可以实现这一目标吗?
解决方案可以在 Unity 论坛上找到,为了方便起见,我将引用。
不是直接的,但您可以使用实例 ID 重命名对象,然后使用 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/
public static GameObject getObjectById(int id)
{
Dictionary<int, GameObject> m_instanceMap = new Dictionary<int, GameObject>();
//record instance map
m_instanceMap.Clear();
List<GameObject> gos = new List<GameObject>();
foreach (GameObject go in Resources.FindObjectsOfTypeAll(typeof(GameObject)))
{
if (gos.Contains(go))
{
continue;
}
gos.Add(go);
m_instanceMap[go.GetInstanceID()] = go;
}
if (m_instanceMap.ContainsKey(id))
{
return m_instanceMap[id];
}
else
{
return null;
}
}