チャックブログ

UnityやC#などをメインに公開していきます。C++も勉強始めました!

【Unity】全てのGameObjectについているタグの中から指定した文字列の一部でもあれば取得する方法

初めに

知恵袋にて「FindGameobjectsWithTagのような指定したTag名のオブジェクトをすべて取得するのではなく、指定した文字列が含まれているオブジェクトを取得する関数はないの?」という質問がありました。
自分もそういえば考えたことがなかったのでどうせなので作ってみようと思います。

サンプルコード

using System.Collections.Generic;
using UnityEngine;

public class Test: MonoBehaviour
{
    
    public List<GameObject> allObjectList;        //現在のシーンのActiveになっているすべてのオブジェクトを取得
    public List<GameObject> kunin;                //ちゃんと動作されているか確認用
    void Start()
    {
        // typeで指定した型の全てのオブジェクトを配列で取得しその要素数分繰り返す
        foreach (GameObject obj in FindObjectsOfType(typeof(GameObject)))
        {
            // シーン上に存在するオブジェクトならば処理.
            if (obj.activeInHierarchy)
            {
                //オブジェクトを格納
                allObjectList.Add(obj);
            }
        }
    }

    void Update()
    {
        //テスト用
        if (Input.GetKeyDown(KeyCode.A))
        {
            kunin = CheckTag("b",allObjectList);
        }
    }

    /// <summary>
    /// 渡したList<GameObject>の中にあるタグ名の中に指定した文字があればそれを返す
    /// </summary>
    /// <param name="_word">指定した文字</param>
    /// <param name="_list">ゲームオブジェクトを格納したList</param>
    /// <returns></returns>
    List<GameObject> CheckTag(string _word,List<GameObject> _list)
    {
        //リターン用のList
        List<GameObject> returnList=new List<GameObject>();
        //渡されたListの要素分処理
        foreach (GameObject obj in _list)
        {
            //Tagの中にその文字があるか判断
            if (obj.tag.Contains(_word))
            {
                //オブジェクトを格納
                returnList.Add(obj);
            }
        }
        return returnList;
    }
}

終わり

作って思ったんですが使いどころがちょっと難しいですねこれ。