在Unity中,它提供了一个获取GameObject实例的函数
GetInstanceID ()
虽然实例id可能与GameObjects不同,但是通过实例id获取GameObject的函数
InstanceIDToObject()
仅在EditorUtility中提供,不能在发布中使用。
据我所知,使用 HashTable 可能是达到这个目标的方法,但是这里有其他方法可以实现吗?
答案 0 :(得分:3)
解决方案可以在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/
答案 1 :(得分:1)
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;
}
}