C# 按脚本将自定义图层设置为剔除遮罩

C# 按脚本将自定义图层设置为剔除遮罩,c#,unity3d,layer,C#,Unity3d,Layer,我想通过脚本创建层,并在运行时将其设置为剔除遮罩。下面是创建新层的代码 public class LayerMaskEx { public static void CreateLayer(string name) { if (string.IsNullOrEmpty(name)) throw new System.ArgumentNullException("name", "New layer name string is either n

我想通过脚本创建层,并在运行时将其设置为剔除遮罩。下面是创建新层的代码

public class LayerMaskEx
{
    public static void CreateLayer(string name)
    {
        if (string.IsNullOrEmpty(name))
            throw new System.ArgumentNullException("name", "New layer name string is either null or empty.");

        var tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]);
        var layerProps = tagManager.FindProperty("layers");
        var propCount  = layerProps.arraySize;

        SerializedProperty firstEmptyProp = null;

        for (var i = 0; i < propCount; i++)
        {
            var layerProp = layerProps.GetArrayElementAtIndex(i);

            var stringValue = layerProp.stringValue;

            if (stringValue == name) return;

            if (i < 8 || stringValue != string.Empty) continue;

            if (firstEmptyProp == null)
                firstEmptyProp = layerProp;
        }

        if (firstEmptyProp == null)
        {
            UnityEngine.Debug.LogError("Maximum limit of " + propCount + " layers exceeded. Layer \"" + name + "\" not created.");
            return;
        }

        firstEmptyProp.stringValue = name;
        tagManager.ApplyModifiedProperties();
    }
}
公共类LayerMaskEx
{
公共静态void CreateLayer(字符串名称)
{
if(string.IsNullOrEmpty(name))
抛出new System.ArgumentNullException(“名称”,“新层名称字符串为null或空”);
var tagManager=new SerializedObject(AssetDatabase.LoadAllAssetPath(“ProjectSettings/tagManager.asset”)[0]);
var layerProps=tagManager.FindProperty(“层”);
var propCount=layerProps.arraySize;
SerializedProperty firstEmptyProp=null;
对于(变量i=0;i
我正在创建一个新层,并将其设置为消隐遮罩,如下所示

LayerMaskEx.CreateLayer("Red");
FirstPersonCamera.cullingMask = 1<<8;
LayerMaskEx.CreateLayer(“红色”);

FirstPersonCamera.cullingMask=1通过在运行时创建图层,您试图解决的问题是什么?我想不出这样做的理由,与其在你的项目中创建一些,不如用一个序列化的字段来获取它们,然后使用它。这只是为了防止最终用户创建它。层仅在编辑器中创建,最终用户如何创建层,为什么?它将是一个统一的包,因此需要创建层