Unityでタグのついたオブジェクトをまとめて操作する方法

この記事は2016年6月28日に書かれたものです。内容が古い可能性がありますのでご注意ください。


今月のUnity新着記事
【簡単!】Unity2Dでクリックした方向に弾を飛ばすサンプル

Unityでタグのついたオブジェクトをまとめて操作する方法


今回は、タグのついたブジェクトをまとめて操作する方法を解説します。
※この記事で使用しているUnityのバージョンは5.6です。

使用する関数


この関数を使用します。
GameObject.FindGameObjectsWithTag(”タグ”);

戻り値はGameObject型の配列です。
※似た関数で、GameObject.FindGameObjectWithTag(“タグ”); があるので注意。(Objectsのsがない)
こちらはオブジェクトが一個だけしか取得できません。
同じタグのついたオブジェクトが複数ある場合、意図したオブジェクトが取得できるとは限りません。

準備として、シーンに”box”というタグ(作成する)をつけたCubeをいっぱい配置しておきましょう。(適当でOK)
WS000356

サンプルスクリプト


以下、スクリプトの記述例です。MainCameraに貼り付けてます。

Skill_01.cs

using UnityEngine;
using System.Collections;

public class Skill_01 : MonoBehaviour {

	void Update () {

		// 左クリックで実行
		if (Input.GetMouseButtonDown(0)) {

			// GameObject型の配列cubesに、"box"タグのついたオブジェクトをすべて格納
			GameObject[] cubes = GameObject.FindGameObjectsWithTag("box");

			// GameObject型の変数cubeに、cubesの中身を順番に取り出す。
			// foreachは配列の要素の数だけループします。
			foreach (GameObject cube in cubes) {
				// 消す!
				Destroy(cube);
			}
		}
	}
}
 

確認

シーンを再生して、マウスの左クリックをしてみましょう。
unity_skill_1
Cubeがすべて消えたら成功です。うまくいかない場合はタグ名などをよく確認してみましょう。

削除ではなくサイズを変えたり色を変えたりすることもできるため汎用性は高いです。
foreachの中で通常のオブジェクトを操作するのと同じように記述すれば大抵のことはできます。
※ただし、オブジェクトの数が多い場合は負荷も考えましょう。foreachが1フレームで動作していることをお忘れなく!

今月のUnity新着記事
【簡単!】Unity2Dでクリックした方向に弾を飛ばすサンプル
  • このエントリーをはてなブックマークに追加

PAGE TOP