圣誕節快樂!我試圖搜索具有特定標簽的多個游戲物件,并將它們全部設定為活動狀態。我似乎無法作業。
void FindObjects(){
GameObject[] object;
object = GameObject.FindObjectsWithTag("Archived");
object[0].setActive(true);
}
uj5u.com熱心網友回復:
void FindObjects()
{
GameObject[] objects;
objects = GameObject.FindGameObjectsWithTag("Archived");
if (objects.Length == 0)
{
Debug.Log("No game objects are tagged with 'Archived'");
}
else
{
for (int i = 0; i < objects.Length; i )
{
objects[i].SetActive(true);
}
}
}
uj5u.com熱心網友回復:
GameObject.FindObjectsWithTag僅查找活動的游戲物件,這意味著您無需執行任何操作來激活它們。
您應該使用Resources.FindObjectsOfTypeAll,它也可以找到不活動的游戲物件。但要注意,因為它還會找到加載的資產,而不僅僅是游戲物件。像這樣的事情可以解決問題:
Transform[] objs = Resources.FindObjectsOfTypeAll<Transform>() as Transform[];
for (int i = 0; i < objs.Length; i ){
if (objs[i].hideFlags == HideFlags.None){
if (objs[i].gameObject.CompareTag("Archived")){
objs[i].gameObject.SetActive(true);
}
}
小細節:如果遇到性能問題(檢查數千個物件)。在創建物件時嘗試將物件添加到 List<> 中,這樣您就可以只使用串列而不是搜索物件。
感謝@derHugo,還有一些其他細節:
請注意,在較新的 Unity 版本中,終于有 FindObjectsOfType(true) 僅在場景中搜索并包括非活動物件!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/398655.html
