UnityUnityメモ

Unity初心者必見!タグ付きオブジェクトを一度に削除する方法

Unity

はじめに

ゲーム開発では、オブジェクトの削除や管理はとても重要なスキルの一つです。特に、複数のオブジェクトを効率よく処理する方法を知っておくと、開発がスムーズに進みます。

この記事では、「タグ」を活用して特定のオブジェクトを一度に削除する方法を、初心者向けにわかりやすく解説します!

簡単なコードと手順で進めるので、プログラミング初心者でも安心して取り組めます。それでは、さっそく始めましょう!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. タグの設定方法

タグとは、Unityでオブジェクトを分類・管理するためのラベルのような機能です。タグを使うと、特定のグループに属するオブジェクトを簡単に検索したり操作したりできます。ここでは、タグを設定する方法を具体的に解説します!


手順:タグを作成して設定する

  1. タグを追加する
    1. ヒエラルキー(Hierarchy)ウィンドウで、削除したいオブジェクトをクリックして選択します。
    2. インスペクター(Inspector)ウィンドウで、「Tag」という項目を探します。
    3. Untagged」と表示されているドロップダウンメニューを開き、リストの一番下にある「Add Tag…」をクリックします。
    4. 「Tags and Layers」ウィンドウが開くので、+ボタンを押して新しいタグを追加します。
    5. 新しいタグの名前を「Block」と入力し、「Save」をクリックします。
  2. タグをオブジェクトに適用する
    1. 再びヒエラルキーで削除したいオブジェクトを選択します。
    2. インスペクターで「Tag」ドロップダウンメニューを開き、先ほど作成した「Block」を選択します。

これで、選択したオブジェクトにタグ「Block」が設定されました!


複数のオブジェクトにタグを適用する方法

複数のオブジェクトに同じタグを適用する場合は、次の手順を使うと便利です。

  1. ヒエラルキーで、Ctrlキー(またはCommandキー)を押しながら複数のオブジェクトを選択します。
  2. インスペクターの「Tag」メニューから「Block」を選択すると、選択したすべてのオブジェクトにタグが適用されます。

これで、タグの設定が完了です!次は、設定したタグを使って、オブジェクトを一括で削除するスクリプトを作成しましょう。



3. スクリプトを作成する方法

次に、設定したタグを使ってオブジェクトを一括削除するスクリプトを作成します。このスクリプトを使うと、特定のタグが付いたオブジェクトをマウスクリック操作で一度に削除できます。


手順:スクリプトを作成する

  1. 新しいスクリプトを作成する
    1. プロジェクトウィンドウ(Project)で、スクリプトを保存するフォルダ(例:Scripts)を右クリックします。
    2. Create」→「C# Script」を選択します。
    3. 新しいスクリプトに「DeleteObjectsWithTag」と名前を付けます。
  2. スクリプトを編集する
    1. 作成したスクリプトをダブルクリックして、コードエディタ(例:Visual Studio)で開きます。
    2. 以下のコードをスクリプトに貼り付けます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DeleteObjectsWithTag : MonoBehaviour
{
    void Update()
    {
        // マウスの左クリックを検知
        if (Input.GetMouseButtonDown(0))
        {
            // "Block"タグがついたすべてのオブジェクトを取得
            GameObject[] objects = GameObject.FindGameObjectsWithTag("Block");
            
            // 各オブジェクトを削除
            foreach (GameObject obj in objects)
            {
                Destroy(obj);
            }
        }
    }
}

スクリプトの解説

  • Input.GetMouseButtonDown(0)
    マウスの左クリックを検知します(0は左クリック、1は右クリック、2は中央クリックを表します)。
  • GameObject.FindGameObjectsWithTag("Block")
    タグ「Block」が付いているすべてのオブジェクトを取得し、配列に格納します。
  • foreach (GameObject obj in objects)
    配列内のすべてのオブジェクトに対して、以下の処理(削除)を繰り返します。
  • Destroy(obj)
    オブジェクトを削除します。

これでスクリプトの作成は完了です!次は、このスクリプトをUnity内で設定し、動作確認をしてみましょう。



4. スクリプトの設定方法

作成したスクリプトをUnityプロジェクトに設定して動作させるために、いくつかのステップを実行します。以下の手順で設定を行いましょう!


手順:スクリプトをゲームオブジェクトにアタッチする

  1. 空のゲームオブジェクトを作成する
    1. ヒエラルキーウィンドウ(Hierarchy)で右クリックします。
    2. Create Empty」を選択して、空のゲームオブジェクトを作成します。
    3. ゲームオブジェクトの名前を「GameManager」に変更します(名前は自由ですが、管理しやすくするため推奨します)。
  2. スクリプトをアタッチする
    1. プロジェクトウィンドウで、作成したスクリプト「DeleteObjectsWithTag」を見つけます。
    2. スクリプトをドラッグして、「GameManager」にドロップします。
    3. アタッチされると、インスペクターウィンドウでスクリプトが確認できるはずです。



5. 実行結果を確認する

ここまでの手順でスクリプトを設定したら、いよいよプレイモードで動作を確認します。作成したスクリプトが正しく動作するかをテストしてみましょう!


動作確認の手順

  1. プレイモードを開始する
    • Unityエディタ上部にある「Play」ボタンをクリックして、プレイモードを開始します。
  2. マウスクリックで動作を確認
    • ゲーム画面内で任意の場所を左クリック(マウス左ボタンを押す)します。
    • 「Block」タグが付いたオブジェクトが画面上からすべて削除されるはずです。

動作確認のポイント

  • 削除される対象: タグ「Block」が付いているオブジェクトのみが削除されます。他のタグやタグ未設定のオブジェクトは影響を受けません。
  • リアルタイム削除: 削除はクリックと同時に行われるため、プレイ中に削除のタイミングを目で確認できます。

動作がうまくいかない場合のチェックリスト

  1. 「Block」タグが正しく設定されているか確認
    • 削除対象のオブジェクトに「Block」タグが付いていることを再度確認してください。
  2. スクリプトが正しくアタッチされているか確認
    • スクリプトが空のゲームオブジェクトにアタッチされているかを確認します。
  3. エラーメッセージの確認
    • プレイモード中にエラーが発生していないか確認します。
    • Unityコンソールで赤いエラーメッセージが表示されている場合、スクリプトのコードに問題がある可能性があります。

実行結果の例

  • 例1: ヒエラルキーに「Cube」オブジェクトが3つ(すべて「Block」タグ設定済み)存在している場合、左クリックをすると全てが削除されます。
  • 例2: 「Block」タグが付いていないオブジェクト(例: Sphere)は削除されず、そのまま残ります。



よくある質問(Q&A)

Q
タグの設定が反映されません。どうしたらいいですか?
A

タグの設定後にオブジェクトを選択し、「Tag」フィールドが正しいか確認してください。

Q
タグが多すぎて混乱しています。どう管理すればいいですか?
A

タグを意味のある名前で整理することと、プロジェクト全体で統一するのがおすすめです。

Q
他のキーで実行したい場合はどうすればいいですか?
A

スクリプトのInput.GetMouseButtonDown(0)部分をInput.GetKeyDown(KeyCode.Space)などに変更してください。