2017-05-17 827 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