コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】ゲームオブジェクトに複数のタグを設定できる「Mulitple Tags」紹介($5.40)

概要

2017/9/7 に「Mulitple Tags」がリリースされました

「Mulitple Tags」を導入すると、
ゲームオブジェクトに複数のタブを設定できるようになります

検証環境

  • Unity 2017.1.1f1
  • Mulitple Tags 1.0

公式マニュアル

http://aiunity.com/products/multiple-tags/manual

コントロールパネル

f:id:baba_s:20170928114015p:plain

Unity メニューの「Tools>AiUnity>MultipleTags>Control Panel」を選択すると
タグを管理するためのコントロールパネルを開くことができます

f:id:baba_s:20170928114120p:plain

このコントロールパネルでタグの追加や設定、
スクリプトの更新を行うことができます

タグの追加

f:id:baba_s:20170928114259p:plain

コントロールパネルで「Find tags」を開いて「Add」ボタンを押します

f:id:baba_s:20170928114341p:plain

そして、「New tag(s)」の入力欄に追加するタグの名前を入力して「Ok」ボタンを押します

f:id:baba_s:20170928114502p:plain

タグ名をスペースで区切ることで一度に複数のタグを追加できます

f:id:baba_s:20170928114540p:plain

追加したタグはコントロールパネルで確認できます

ゲームオブジェクトにタグを設定

f:id:baba_s:20170928114715p:plain

Scene ビューや Hierarchy でタグを設定したいゲームオブジェクトを選択すると
コントロールパネルに表示されます

f:id:baba_s:20170928114904p:plain

そして、「+」ボタンを押すことでタグを設定することができます

f:id:baba_s:20170928115044p:plain

このようにタグを複数設定することが可能です

f:id:baba_s:20170928115100p:plain

設定したタグは Inspector でも確認可能です

スクリプトの更新

using AiUnity.Common.Attributes;
using System.Collections.Generic;
using AiUnity.Common.Tags;

/// <Summary>
/// Provide strongly typed access to Unity tags.
/// <Summary>
public class TagAccess : ITagAccess
{
    public const string Untagged = "Untagged";
    public const string Respawn = "Respawn";
    public const string Finish = "Finish";
    public const string EditorOnly = "EditorOnly";
    public const string MainCamera = "MainCamera";
    public const string Player = "Player";
    public const string GameController = "GameController";
    public const string Blue = "Blue";
    public const string Green = "Green";
    public const string Red = "Red";

    private static readonly List<string> tagPaths = new List<string>()
    {
        "Untagged",
        "Respawn",
        "Finish",
        "EditorOnly",
        "MainCamera",
        "Player",
        "GameController",
        "Green",
        "Red/Green/Blue"
    };

    public IEnumerable<string> TagPaths { get { return tagPaths.AsReadOnly(); } }

}

スクリプトからタグを使用してゲームオブジェクトを検索するために
上記のような、定数や配列でタグ名を管理するスクリプトを作成する必要があります

f:id:baba_s:20170928115414p:plain

タグ名を管理するスクリプトは、コントロールパネルの「Options>TagAccess script」の
「Create」ボタンを押すことで作成可能です

f:id:baba_s:20170928115629p:plain

作成したスクリプトは「Assets/AiUnity/UserData/MultipleTags」フォルダに
「TagAccess.cs」という名前で保存されます

API の使用例

using AiUnity.MultipleTags.Core;
using UnityEngine;

public class Example : MonoBehaviour
{
    private void Awake()
    {
        var ts = TagService.Instance;
        
        // 指定されたタグを含むすべてのゲームオブジェクトの検索
        var list1 = ts.FindGameObjectsWithTags( TagAccess.Red );
        
        // 指定された条件を満たすすべてのゲームオブジェクトの検索
        var list2 = ts.FindGameObjectsWithTags( "(Red | Green) & Blue" );
        
        // 指定されたパターンマッチにヒットするすべてのゲームオブジェクトの検索
        var list3 = ts.FindGameObjectsWithTags( "T.*" );
        
        // 指定されたタグを含むすべての子オブジェクトの検索
        var list4 = gameObject.FindGameObjectsWithTags( TagLogic.And, TagAccess.Red );
        
        // 指定された条件を満たすかどうかの確認
        var hasTags = gameObject.HasTags( TagLogic.Or, TagAccess.Red, TagAccess.Green );
        
        // タグを追加
        gameObject.AddTags( TagAccess.Blue );
    }
}

関連記事