Unity、Tagのついたオブジェクトをスクリプトから取得する際、Cloneオブジェクトを取得してしまう問題

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;
			}
		}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です