GameObject.FindGameObjectWithTag関数の戻り値にインスタンス化されておらず、HierarchyにもないPrefabを取得してしまう問題。
解決策はそのTagの付加されたすべてを取得して、その中のものがHierarchyに存在するかどうかを調べ、存在していればそれを選択する。
GameObject gameObject; GameObject[] gameObjects = GameObject.FindGameObjectsWithTag("HogeHoge"); foreach(GameObject temp in gameObjects){ if(temp.activeInHierarchy){ gameObject = temp; break; } }
上記のスクリプトのactiveInHierarchyがtrueでもCloneオブジェクトを何故か拾うので、上記のは使えない。かわりにオブジェクトの名前にCloneという文字列を含んでいるか含んでいないかで判断する。すると以下のようになる。
GameObject gameObject; GameObject[] gameObjects = GameObject.FindGameObjectsWithTag("HogeHoge"); foreach(GameObject temp in gameObjects){ if(temp.name.IndexOf("Clone") == -1){ gameObject = temp; break; } }