【Unity入門】Tagを使ってオブジェクトを識別してみる
この記事の目次
Tagとは
Tagとはゲームオブジェクトを識別するためのものです。
オブジェクトにTagをつけておけば、スクリプトで、Tagがついたオブジェクトを取得できます。
実際に使ってみる
準備
それでは、実際にTagを使ってみましょう。
まずは、以前作成した、『Unity Basics』というプロジェクトを開いてください。
『Unity Basics』を開いたら、Tagを使うシーンを作りましょう。
Scenesフォルダの中に作成します。
ProjectウィンドウでScenesフォルダを選択しましょう。
選択した状態で『+』ボタンを押しましょう。
色々と出てくるので、『Scene』をクリックしましょう。
すると、Scenesフォルダの中に新しくSceneが作成されます。
Sceneの名前を『Tag』に変更しておきましょう。
今回は『Tag』の中でやっていきたいので、Sceneを移動します。
『Tag』をダブルクリックしましょう。
すると、Sceceを移動することができます。
Hierarchyウィンドウを見ると、現在のSceneが『Tag』に変わっていますね。
オブジェクトにTagをつける
それでは、オブジェクトにTagをつけていきましょう。
まずはTagをつけるオブジェクトを作成します。
Hierarchyウィンドウで『+』ボタンを押してください。
色々と出てくるので、3D Object > Sphereと押していきます。
すると、オブジェクトを作ることができます。
このアイテムだとみなして、Itemというタグをつけてみましょう。
HierarchyウィンドウでSphereを選択してください。
選択したら、Inspectorの上の方にTagという項目が見つかります。
ここでTagをつけます。
初期状態ではTagがついていないので、Untaggedとなっています。
ここをItemというTagに変更していきます。
Untaggedをクリックしてください。
すると、最初から用意されているTagの一覧が出てきます。
これらを選択することでTagをつけることができます。
しかし、ItemというTagは最初から用意されていません。
なので、Tagを新しく追加しましょう。
Tag一覧の下に『Add Tag…』とあるので、クリックしましょう。
すると、Inspectorの表示が変わります。
上の方にあるTagsの
『+』ボタンを押しましょう。
すると、Tagを追加する画面が表示されます。
Itemと書き換えて、
Saveを押しましょう。
すると、ItemというTagを追加することができます。
Tagを作ることができたので、作ったTagをオブジェクトに追加しましょう。
もう一度、HierarchyウィンドウでSphereを選択してください。
InspectorウィンドウでTagのUntaggedをクリックします。
すると、Tagの一覧の中に先ほど作ったItemというTagが追加されているのが分かりますね。
これをクリックしましょう。
これで、オブジェクトにItemというTagを追加することができました。
Tagがついたオブジェクトを一つ取得
次にスクリプトからItemというTagがついたオブジェクトを取得してみましょう。
Tagがついたオブジェクトを一つだけ取得する場合は、
GameObject.FindWithTag(“Tagの名前”) |
と記述します。
それでは、やっていきましょう。
まずはスクリプトを作成しましょう。
ProjectウィンドウでScriptsフォルダを選択してください。
選択した状態で『+』ボタンを押しましょう。
色々と出てくるので、『C# Script』を押しましょう。
すると、新しくスクリプトが作られます。
名前が確定する前に、『TagScript』と書き換えます。
スクリプトを作成したら、適当なオブジェクトに追加します。
今回はMain Cameraに追加しましょう。
TagScriptをMainCameraにドラッグ&ドロップします。
すると、Main CameraにTagScriptが追加されます。
オブジェクトにスクリプトを追加したら、編集していきましょう。
ProjectウィンドウでTagScriptをダブルクリックしてください。
すると、スクリプトを編集できるようになります。
今回はItemというTagがついたオブジェクトを取得して、そのオブジェクトの名前をコンソールに出力してみましょう。
Start関数の中に
GameObject item = GameObject.FindWithTag(“Item”); Debug.Log(item.name); |
と記述しましょう。
コードについて説明していきます。
まず、GameObject.FindWithTag(“Item”)という記述は
現在のSceneからItemというTagがついたオブジェクトを探しだし、最初に見つかったオブジェクトを取得するという内容です。
取得したオブジェクトはGameObject型の
itemという変数に格納されます。
次にDebug.Logで
itemの名前を
コンソールに出力します。
今回ItemというTagがついているオブジェクトはSphereです。
なので、コンソールにはSphereと表示されるはずです。
実際にそうなるのか、再生して確かめてみましょう。
スクリプトを保存して、Unityエディタに戻りましょう。
Unityエディタに戻ったら、再生ボタンを押しましょう。
すると、予想通りSphereと表示されましたね。
このように、GameObject.FindWithTagを使えば、指定したTagがついたオブジェクトを一つ取得することができます。
Tagがついたオブジェクトを複数取得
次にスクリプトからItemというTagがついたオブジェクトを複数取得してみましょう。
Tagがついたオブジェクトを複数取得する場合は、
GameObject.FindWithTag(“Tagの名前”) |
と記述します。
それでは、やっていきましょう。
まず、前回書いたコードは、
コメントアウトしておきましょう。
次に、今回は複数のItemというTagがついたオブジェクトを取得したいため、Sphereを複製しておきましょう。
HierarchyウィンドウでSphereの上で
右クリックをしましょう。
色々と出てくるので、Duplicateを押しましょう。
すると、Sphereを複製することができます。
もう一つ複製しておきましょう。
Sphereの上で右クリックし、Duplicateを押しましょう。
すると、もう一つ複製できます。
複製されたオブジェクトは複製元のオブジェクトと同じようにItemというTagがついています。
オブジェクトを複製することができたので、スクリプトで複数のオブジェクトを取得していきましょう。
TagScriptを編集していきます。
Start関数の中に
GameObject[] items = GameObject.FindGameObjectsWithTag(“Item”); foreach(GameObject item in items){ Debug.Log(item.name);} |
と記述しましょう。
コードについて説明しておきます。
まず、GameObject.FindGameObjectsWithTag(“Item”)という記述は、
現在のSceneからItemというTagがついたオブジェクトを探しだし、配列に格納するという内容です。
今回は、Sphere、Sphere(1)、Sphere(2)の三つのオブジェクトが配列に格納されます。
オブジェクトを格納した配列はGameObject型の配列
itemsに格納されます。
次に、foreachを使って、配列Itemsに格納されているオブジェクトの名前を全て出力します。
foreachの中を詳しく見ておきましょう。
このforeach文はループのたびにitemsという配列から
要素を取得してGameObject型の
変数itemに格納します。
itemに格納された要素はDebug.Logを使って
その名前が、
コンソールに出力されます。
今回はitemsにSphere、Sphere(1)、Sphere(2)の
三つのオブジェクトが格納されるので、コンソールには、Sphere、Sphere(1)、Sphere(2)がそれぞれ出力されるはずです。
実際にそのように出力されるのか、再生して確かめてみましょう。
スクリプトを保存して、Unityエディタに戻りましょう。
Unityエディタに戻ったら、再生ボタンを押しましょう。
拡大するために、コンソールをクリックします。
すると、予想通り、Sphere、Sphere(1)、Sphere(2)がそれぞれ出力されましたね。
このようにGameObject.FindWithTagを使えば、指定したTagがついたオブジェクトを複数取得できます。