[Unity]選択した要素とその子要素のタグを全て変更する方法

2021年2月20日

Unity にて、オブジェクトとそれが含む全ての子要素(孫要素も含む)のタグを一括変換する方法についてです。

レイヤーであれば、変更時に子要素も変更するかどうかを確認するダイアログが表示されます。しかし、タグの場合はデフォルトでは一度に変更する方法がない(?)ようなので、Editorスクリプトで対応するのが良さそうです。

オブジェクトの子要素のタグを一括変換するスクリプト例

ヒエラルキーで選択したオブジェクトが含む、全てのオブジェクトのタグを設定するC#スクリプトを以下に記載します。ディレクトリ Assets > Editor 以下に保存するとメニュー項目に追加され、簡単にスクリプトを実行できます。

Unityのユーザー定義メニュー項目

ChangeAllChildrenTag.cs

using UnityEngine;
using UnityEditor;

public class ChangeAllChildrenTag : MonoBehaviour 
{

    [MenuItem("MyTools/Change All Children Tag")]
    static void ChangeTag()
    {
        // ヒエラルキー上で選択した全ての要素
        Transform[] transforms = Selection.transforms;

        foreach (Transform transform in transforms) {
            GetChildren(transform);
        }
    }

    static void GetChildren(Transform transform)
    {
        // 新しく設定するタグ
        string newTag = "Untagged";

        // タグを設定
        transform.tag = newTag;

        // 子要素を取得
        Transform children = transform.GetComponentInChildren<Transform>();
        if (children.childCount == 0)
        {
            // 見つからなければ終了
            return;
        }

        foreach (Transform child in children)
        {
            // 子要素の子要素も同様に
            GetChildren(child);
        }
    }
}

変数 newTag の値(Untagged)を設定したいタグに変更してください。

ヒエラルキー上で選択したオブジェクトの子要素を再帰的に全て検索し、タグを一括変更してくれます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です