【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がついたオブジェクトを複数取得できます。