Я хочу создать слои через мой скрипт и установить его как маску отбраковки во время выполнения. У меня есть следующий код, который создает новые слои.
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 слоев, которые будут выбраны для маски отбраковки. К сожалению, это не работает, как ожидалось. Есть ли способ сделать это с пользовательскими слоями?