- オブジェクトのタグを取得する方法は?
- オブジェクトのタグをまとめて取得することはできるの?
- タグを使って当たり判定を実装したい!
Unityでゲーム開発していると、タグを使うことは少なくありません。
しかし、タグの取得方法を忘れてしまうことはよくあることです。
そこで本記事では、タグの取得に関する方法をまとめて解説します。
この記事を読めば、タグの取得方法を完璧に理解することができます。
タグの追加方法
まずは、タグの追加方法を解説します。
ゲームオブジェクトをクリックして、インスペクタービューの現在設定されているタグをクリックします。
「Add Tag…」を選択します。
「+」をクリックすると、タグの名前を入力することができるようになるので、入力します。ここでは、「Ground」にしました。
入力ができたら、「Save」で保存します。
もう一度ゲームオブジェクトを選択して、インスペクタービューの現在設定されているタグをクリックし、追加されたタグを選択します。
タグの設定ができました!
オブジェクトのタグの取得方法
オブジェクトのタグをスクリプトで取得する方法を解説します。
「gameObject.tag」で、そのゲームオブジェクトのタグ名を取得することができます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetTag : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//名前を取得する
string gameObjectTagName = this.gameObject.tag;
Debug.Log(gameObjectTagName);
}
}
このコードでは、このスクリプトがアタッチされているゲームオブジェクトのタグの名前をstring型で取得しています。
そして、Debug.Logでコンソールにタグの名前を出力しています。
指定タグのオブジェクトを複数まとめて取得する方法
指定したタグがついているオブジェクトをすべて取得する方法を紹介します。
「GameObject.FindGameObjectsWithTag(“Ground”)」で、引数の文字列の名前がタグになっているゲームオブジェクトをまとめて取得できます。
例えば、「Ground」というタグがついているゲームオブジェクトをすべてまとめて取得する例を掲載します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetAllTags : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//Groundタグのゲームオブジェクトをすべて取得する
GameObject[] objs = GameObject.FindGameObjectsWithTag("Ground");
foreach(GameObject obj in objs)
{
Debug.Log(obj.gameObject.name);
}
}
}
このコードでは、objsというゲームオブジェクトの配列に「Ground」という名前のタグがついているゲームオブジェクトをすべて格納しています。
そして、foreach文ですべて順番にコンソールに名前を出力しています。
タグを使った当たり判定の実装方法
今回は、球が地面に当たったかどうかを判定するスクリプトを例に実装します。
スクリプトは以下のとおりです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TagCollision : MonoBehaviour
{
//ゲームオブジェクトに当たったとき
private void OnCollisionEnter(Collision collision)
{
//当たったゲームオブジェクトがGroundタグだったとき
if (collision.gameObject.CompareTag("Ground"))
{
Debug.Log("地面と当たった!");
}
}
}
「collision.gameObject.CompareTag(“Ground”)」は、当たったゲームオブジェクトのタグの名前によって、trueかfalseを返します。
今回は、引数の文字列が「Ground」なので、当たったゲームオブジェクトが「Ground」という名前のタグのときにtrueが返ってきます。
このスクリプトを球にアタッチし、地面のゲームオブジェクトに「Ground」タグを設定して実行しました。
地面に球が当たったときに、コンソールに「地面に当たった!」と出力されていることが確認できます。
もちろん、「Ground」タグ以外のゲームオブジェクトに当たっても、反応しません。
まとめ
今回は、タグの取得方法とタグを利用した当たり判定の実装方法を解説しました。
当たり判定の実装は、敵と当たったときだけダメージを受けるといった実装も考えられますね。
それでは!