Установка пользовательских слоев в маску отбраковки скриптом - PullRequest
0 голосов
/ 22 октября 2019

Я хочу создать слои через мой скрипт и установить его как маску отбраковки во время выполнения. У меня есть следующий код, который создает новые слои.

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.CreateLayer("Red");
FirstPersonCamera.cullingMask = 1<<8;

Я хочуиметь только первые 7 слоев, которые будут выбраны для маски отбраковки. К сожалению, это не работает, как ожидалось. Есть ли способ сделать это с пользовательскими слоями?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...