如何通过脚本添加排序层
How to add sorting layer via script
我正在尝试通过脚本添加排序层。
我可以通过脚本添加排序层吗?以及如何?
经过一些测试,我找到了方法。
要添加排序层,我们需要访问它的容器。
Sorting Layer
是 TagManager.asset
对象的一部分。 (在 ProjectSettings
目录的相对路径。)
这段代码可以获取TagManager as SerializedObject
进行修改
var serializedObject = new SerializedObject(AssetDatabase.LoadMainAssetAtPath("ProjectSettings/TagManager.asset"));
要获得 SortingLayer
数组,我们必须使用以下代码:
var sortingLayers = serializedObject.FindProperty("m_SortingLayers");
我们首先检查数组中不存在我们的目标SortingLayer
。
var layerName = "SomeLayer";
for (int i = 0; i < sortingLayers.arraySize; i++)
{
if (sortingLayers.GetArrayElementAtIndex(i).FindPropertyRelative("name").stringValue.Equals(layerName))
return; // this mean target sorting layer exist and we don't need to add it.
}
如果不存在现在添加:
sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
var newLayer = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
newLayer.FindPropertyRelative("name").stringValue = layerName;
newLayer.FindPropertyRelative("uniqueID").intValue = layerName.GetHashCode(); /* some unique number */
别忘了申请来源:
serializedObject.ApplyModifiedProperties();
所有顶级代码都可以压缩为波纹管方法:
public static void CreateSortingLayer(string layerName)
{
var serializedObject = new SerializedObject(AssetDatabase.LoadMainAssetAtPath("ProjectSettings/TagManager.asset"));
var sortingLayers = serializedObject.FindProperty("m_SortingLayers");
for (int i = 0; i < sortingLayers.arraySize; i++)
if (sortingLayers.GetArrayElementAtIndex(i).FindPropertyRelative("name").stringValue.Equals(layerName))
return;
sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
var newLayer = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
newLayer.FindPropertyRelative("name").stringValue = layerName;
newLayer.FindPropertyRelative("uniqueID").intValue = layerName.GetHashCode(); /* some unique number */
serializedObject.ApplyModifiedProperties();
}
我正在尝试通过脚本添加排序层。
我可以通过脚本添加排序层吗?以及如何?
经过一些测试,我找到了方法。
要添加排序层,我们需要访问它的容器。
Sorting Layer
是 TagManager.asset
对象的一部分。 (在 ProjectSettings
目录的相对路径。)
这段代码可以获取TagManager as SerializedObject
进行修改
var serializedObject = new SerializedObject(AssetDatabase.LoadMainAssetAtPath("ProjectSettings/TagManager.asset"));
要获得 SortingLayer
数组,我们必须使用以下代码:
var sortingLayers = serializedObject.FindProperty("m_SortingLayers");
我们首先检查数组中不存在我们的目标SortingLayer
。
var layerName = "SomeLayer";
for (int i = 0; i < sortingLayers.arraySize; i++)
{
if (sortingLayers.GetArrayElementAtIndex(i).FindPropertyRelative("name").stringValue.Equals(layerName))
return; // this mean target sorting layer exist and we don't need to add it.
}
如果不存在现在添加:
sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
var newLayer = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
newLayer.FindPropertyRelative("name").stringValue = layerName;
newLayer.FindPropertyRelative("uniqueID").intValue = layerName.GetHashCode(); /* some unique number */
别忘了申请来源:
serializedObject.ApplyModifiedProperties();
所有顶级代码都可以压缩为波纹管方法:
public static void CreateSortingLayer(string layerName)
{
var serializedObject = new SerializedObject(AssetDatabase.LoadMainAssetAtPath("ProjectSettings/TagManager.asset"));
var sortingLayers = serializedObject.FindProperty("m_SortingLayers");
for (int i = 0; i < sortingLayers.arraySize; i++)
if (sortingLayers.GetArrayElementAtIndex(i).FindPropertyRelative("name").stringValue.Equals(layerName))
return;
sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
var newLayer = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
newLayer.FindPropertyRelative("name").stringValue = layerName;
newLayer.FindPropertyRelative("uniqueID").intValue = layerName.GetHashCode(); /* some unique number */
serializedObject.ApplyModifiedProperties();
}