ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Unity - タグに関する操作まとめ

初めに

 Unity の GameObject にはタグを割り当てることができます。本記事は、タグに関する操作をまとめます。

タグ

タグとは

 ゲームオブジェクトに割り当てることができるものです。スクリプトからゲームオブジェクトを識別するのに役立ちます。

docs.unity3d.com

新規タグの作成

 新しいタグは次の手順で作成できます。

(新規タグの作成手順)

  1. Inspector の tag の部分をクリックし、Add Tag... をクリックします。
  2. Tag and Layer マネージャーが開いたら、"+" をクリックし、タグの名前を入力、Saveをクリックします。

ビルトインタグ

 あらかじめ設定されているタグが6つあります。これらのタグは Tag and Layer マネージャーに表示されません。

  • Untagged
  • Respawn
  • Finish
  • EditorOnly
  • MainCamera
  • Player
  • GameController
GameObject.tag

 ゲームオブジェクトのタグ名を取得・変更できます。型は string です。

void Start()
{
    //このゲームオブジェクトに "Player" タグを指定
    gameObject.tag = "Player";
}
GameObject.CompareTag

 ゲームオブジェクトのタグを判定するための関数です。

//ゲームオブジェクトのタグが引数で指定したものと一致したら true, 一致しなかったらfalse
public bool CompareTag (string tag);

(例)

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void OnTriggerEnter(Collider other)  //接触したオブジェクトの Collider が other とする
    {
        if (other.gameObject.CompareTag("Player"))  //otherのタグが"Player"だったら
        {
            Destroy(other.gameObject);  //otherのオブジェクトを削除
        }
    }
}
GameObject.FindWithTag

 引数で指定したタグがタグ付けされたアクティブなゲームオブジェクトのうち、最初に見つかったものを返します。もし見つからない場合は null を返します。

public static GameObject FindWithTag (string tag);

(例)

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public GameObject respawnPrefab;
    public GameObject respawn;
    void Start()
    {
        if (respawn == null)  //respawnがnullだったら
            respawn = GameObject.FindWithTag("Respawn");  //"Respawn"タグが割り当てられているゲームオブジェクトをrespawnに代入

        Instantiate(respawnPrefab, respawn.transform.position, respawn.transform.rotation);
    }
}
GameObject.FindGameObjectsWithTag

 引数で指定したタグがタグ付けされたアクティブなゲームオブジェクトの配列を返します。もし見つからない場合は空の配列を返します。

public static GameObject[] FindGameObjectsWithTag (string tag);

(例)

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public GameObject respawnPrefab;
    public GameObject[] respawns;
    void Start()
    {
        if (respawns == null)
            respawns = GameObject.FindGameObjectsWithTag("Respawn");  //"Respawn"タグが割り当てられているゲームオブジェクトを配列で取得

        foreach (GameObject respawn in respawns)
        {
            Instantiate(respawnPrefab, respawn.transform.position, respawn.transform.rotation);
        }
    }
}

最後に

  • タグはゲームオブジェクト に割り当てることができるもの
  • スクリプトからゲームオブジェクトを識別するのに役立つ
  • GameObject.tag、GameObject.CompareTag、GameObject.FindWithTag、GameObject.FindGameObjectsWithTag を使ってスクリプトから識別する