MRが楽しい

MRやVRについて学習したことを書き残す

Unityでスクリプトから作成済みのレイヤー一覧を取得する

本日はUnityの小ネタ枠です。
Unityでスクリプトから作成済みのレイヤー一覧を取得する方法についてです。

LayerMask.LayerToName

レイヤー番号からレイヤー名を取得します。
レイヤー名の設定がないレイヤー番号を指定すると空文字が返ります。
本関数を使って0番~31番のレイヤーがAdd Layerで設定済みのレイヤーか否かを判定できます。
docs.unity3d.com

サンプルスクリプト

現在設定済みの全てのレイヤーを走査してログに出力する以下のサンプルスクリプトを作成しました。
・LayerCheckTest.cs

using System.Collections.Generic;
using UnityEngine;

public class LayerCheckTest : MonoBehaviour
{
    private class LayerData
    {
        public string name;
        public int layer;
    }
    
    [ContextMenu("CheckLayerTest")]
    public void CheckLayerTest()
    {
        // レイヤー名とレイヤー番号の対応を確認する
        List<LayerData> layerDataList = new List<LayerData>();
        
        for (int layer = 0; layer < 32; layer++)
        {
            // 0~31のレイヤー番号からレイヤーの名称を取得する
            string layerName = LayerMask.LayerToName(layer);
            if (string.IsNullOrEmpty(layerName))
            {
                // 名称が設定されていないレイヤー番号はスキップする
                continue;
            }
            
            // 名称が取得できた場合は設定済みのレイヤーとしてリストに追加する
            LayerData layerData = new LayerData { name = layerName, layer = layer };
            layerDataList.Add(layerData);
        }
        
        // 設定済みレイヤー名とレイヤー番号の対応をログ出力する
        foreach (var layerData in layerDataList)
        {
            Debug.Log($"name: {layerData.name}, layer: {layerData.layer}");
        }
    }
}

以下のレイヤー設定を行ったUnityプロジェクトでサンプルスクリプトを実行してみます。

設定済みのレイヤー番号と名称を取得することができました。