Unity中經常需要查找對象,對應的API也有好幾種,各自有不同的適用場合。
1. GameObject.Find
通過名字或路徑查找游戲對象。
GameObject.Find("GameObject");
GameObject.Find("GameObject/ChildGameObject);
該方法只會返回一個active的,即未隱藏對象。
如果參數包含 '/' 字符,它會像路徑名一樣遍歷層次結構,所以效率低。故建議在Start()或Awake()中查找對象並保存引用,切忌在Update()中動態查找。
官方手冊上的兩個TIps: 1.如果您希望找到子 GameObject,使用 Transform.Find 通常更容易。
2.如果游戲運行有多個場景,則 Find 將搜索所有場景。
2. Transform.Find
返回該gameobject的子物體(如果未查找到則返回null),如果參數包含 '/' 字符,它會像路徑名一樣遍歷層次結構,並且可以找到隱藏的物體。
需要注意的是Transform.Find的遍歷並不會遍歷整個層級結構,而是遍歷該Transform的物體下面的子層級結構。
3. GameObject.FindWithTag
返回第一個標簽為指定值的對象,所以當場景中有多個帶相同標簽的物體時不一定能返回正確的對象