2017-05-17 3 views
1

In Unity zugreifen zu können, bietet es eine Funktion, die Instanz von Gameobjectwie Gameobject von Instanz-ID in Unity

GetInstanceID() 

zu bekommen, während die Instanz-ID Gameobjects unterscheiden konnte, aber die Funktion Gameobject durch Instanz-ID

zu erhalten
InstanceIDToObject() 

wird nur in EditorUtility zur Verfügung gestellt, die in Release nicht verwendet werden kann.

Soweit ich denke, mit HashTable ist vielleicht eine Methode, um das zu erreichen, aber gibt es hier keine andere Methode, um das zu erreichen?

+0

Der einzige Weg, möglich sein könnte, durch Reflexion ist, aber das ist es nicht wert aus Performance-Gründen. Bleibe bei 'HashTable' oder' Dictionary'. – Programmer

Antwort

5

Die Lösung kann in Unity-Foren gefunden werden, ich zitiere aus Bequemlichkeit.

Nicht direkt, aber Sie können die InstanceID verwenden, um das Objekt umzubenennen, und dann ein GameObject.Find mit der InstanceID ausführen, um auf das Objekt auf diese Weise zuzugreifen.

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; 

Ich hatte auch eine Hash-Tabelle und verwendet, um die Instanz-IDs als Schlüssel für die Hash-Tabelle, um jedes Objekt zuzugreifen. Sie können Objekte selbst durchlaufen und Objekten zuweisen, aber da jedes Objekt eine eindeutige InstanceID() hat, kann es auch verwendet werden, wenn die Situation es erfordert.

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

+2

Dies sollte als Antwort akzeptiert werden. Sie sollten jedoch niemals ein Objekt suchen müssen, da es zu einem schlechten Leistungseinbruch führt, wenn Sie zu viele Suchen in Ihrem Code haben. Wenn Sie FindWithTag berücksichtigen müssen, ist dies schneller, vorausgesetzt, dass Sie nicht zu viele Objekte mit demselben Tag versehen. Halten Sie im Allgemeinen Hinweise darauf, was Sie finden könnten. – Farhan

Verwandte Themen