UnityでFindGameObjectsWithTag
メソッドを使い、複数のオブジェクトをタグで指定して全部取得しようとしたときにエラーが出たのでコレについてメモです。
FindGameObjectsWithTagで複数オブジェクト取得時にエラー
以下のエラーが出ました。(言語はC#です)
Cannot implicitly convert type `UnityEngine.GameObject[]' to `UnityEngine.GameObject'
このエラーが出たときのソースコードはこんな感じです。特定のタグのオブジェクトを全てDestroy
メソッドで削除する内容です。
void obstacleDestroy() {
GameObject obstacles = GameObject.FindGameObjectsWithTag("Obstacle");
foreach(GameObject obs in obstacles) {
Destroy(obs);
}
}
このソースコードのどこが間違っているかというと、2行目の型指定が原因です。FindGameObjectsWithTag
の返り値は配列なので、2行目をこうしてやります。
GameObject[] obstacles = GameObject.FindGameObjectsWithTag("Obstacle");
GameObject型の後ろに”[]”(大括弧)を付け足し、「これは配列ですよ~」と明示的に宣言します。これで解決します。
参考になった書籍はこちらです。(P261 下部)
Unityのリファレンスを見ると、2つ目以降のサンプルには型宣言にこの大括弧が書かれていて、1つ目のサンプルには書かれていない点が気になります。