Unityのタグの使い方について解説します。タグを知っているとできることがたくさん増えるのでぜひ覚えておきましょう。
タグはこんな場面で便利です。
複数のゲームオブジェクトをまとめて扱いたいとき
特定のゲームオブジェクトを指定したいとき
タグはゲームオブジェクト1つに1つずつ設定できます。複数のゲームオブジェクトに同一のタグを設定すれば複数のゲームオブジェクトをまとめて処理できます。
この記事では初めにタグの付け方、追加方法を解説し、後半ではタグの機能を使ったスクリプトの例をいくつか挙げていきますのでぜひ勉強してみてください!
タグの追加方法
まず初めにゲームオブジェクトへタグを付ける方法についてです。
タグ付けの手順
1.タグを付けたいゲームオブジェクトをクリック
2.Inspector > ゲームオブジェクト名の下部のtag > 付けたいタグを設定
デフォルトでは以下のようなタグがあります。
デフォルトのタグに適したものがない場合はタグを自作します。タグはいくつ作っても大したデメリットはないので自分のわかりやすいタグ名を付けましょう。
タグの追加手順
1.ゲームオブジェクトのInspectorからTag > Add Tagをクリック
タグを利用したスクリプト【コピペOK】
タグ機能を利用したスクリプトをいくつかまとめました。
タグでゲームオブジェクトを検索
タグでゲームオブジェクトを検索できます。
複数のゲームオブジェクトを検索する場合
1 |
GameObject.FindGameObjectsWithTag("tag1"); |
このスクリプトはゲームオブジェクトの配列型GameObject[]が返されます。
なので処理時はFor文やWhile文でループさせて処理するのが手軽です。
以下のように複数のゲームオブジェクトを用意し、タグ検索で取得したゲームオブジェクトの名前をConsoleへ出力できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class DestroyTag : MonoBehaviour { GameObject[] tag1_Objects; //代入用のゲームオブジェクト配列を用意 void Start() { tag1_Objects = GameObject.FindGameObjectsWithTag("tag1"); for (int i = 0; i < tag1_Objects.Length; i++) { Debug.Log(tag1_Objects[i]); } } } |
Consoleへの出力は以下のようになります。
4つすべてを取得できていますね。これをゲームオブジェクトの名前で検索していたらと思うとおそろしい…
以外だったのがゲームオブジェクトの格納順がHierarchyの並びとは違うことです。予想ではCube->Cube(1)->Cube(2)->Cube(3)に出力されると思っていたのが、上のような順に出力されました。
ここらへんは調べようとするよ沼になりそうなので目をつむっておきます。気になる方は調べてみてください。
タグでゲームオブジェクトを判別
個人的によく使うのがタグとIF文を利用してゲームオブジェクトを判別するスクリプトです。
例えば、使わないゲームオブジェクトを判別して削除したり、特定のゲームオブジェクトが衝突したときに処理したりするときに使えます。
ゲームオブジェクトの判別には、CompareTag()を使います。
1 2 3 4 |
if (this.gameObject.CompareTag("tag1")) { Destroy(this.gameObject); } |
上の例はゲームオブジェクトのタグがtag1の場合にゲームオブジェクトを削除します。
ちなみに、タグの判別にはgameObject.tag == “string tag”もありますが、CompareTag()の方が早いとのこと。詳しく知りたい方は下記の記事を参考に。
CompareTag()はgameObject.tagの処理時間の約半分で済みます。
タグを覚えると複数ゲームオブジェクトの処理が楽にできるのでぜひ覚えておきましょう!
Unityの教科書 Unity2019完全対応版 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)