2017-05-17 18 views
1

にインスタンスIDでゲームオブジェクトにアクセスする方法、それはインスタンスIDは、ゲームオブジェクトを異なる可能性がありますがゲームオブジェクトはユニティではユニティ

GetInstanceID() 

のインスタンスを取得する機能を提供しますが、機能はインスタンスID

でゲームオブジェクトを取得するには
InstanceIDToObject() 

は、リリースでは使用できないEditorUtilityでのみ提供されます。

私が考える限り、ハッシュテーブルを使用するのはおそらくそれに達する方法ですが、これを達成するための他の方法はありませんか?

+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