オレオレライブラリ、と言うかオレオレ開発環境を構築する上で、SortingLayerを自動的に設定したい場合が有ります。
そのための手順を調べたのでメモしておきます。
ScriptからSortingLayerを追加するテスト。
— MIYAKE (@ScreenPocket) October 12, 2021
Qiitaの記事用に動画を張り付け。 pic.twitter.com/YRx4EQKcjr
先に参考資料を貼っておきます
↑の記事にあるコードと、コメントにある修正部分を参照してメソッドを用意します
SettingWindow.csの一部
/// <summary>
/// SortingLayerの準備
/// </summary>
private static void SetupSortingLayer()
{
string[] sortingLayerNames = {"UI","SystemUI"};//←追加したいSortingLayerをご自由に
foreach (var sortingLayerName in sortingLayerNames)
{
CreateSortingLayer(sortingLayerName);
}
}
/// <summary>
/// SoringLayerを追加
/// </summary>
/// <param name="layerName">追加したいSortingLayerの名前</param>
private static void CreateSortingLayer(string layerName)
{
var serializedObject = new SerializedObject(AssetDatabase.LoadMainAssetAtPath("ProjectSettings/TagManager.asset"));
var sortingLayers = serializedObject.FindProperty("m_SortingLayers");
for (var i = 0; i < sortingLayers.arraySize; i++)
{
if (sortingLayers.GetArrayElementAtIndex(i).FindPropertyRelative("name").stringValue.Equals(layerName))
{
Debug.LogWarning($"Already Exists SortingLayer! name:{layerName}");
return;
}
}
sortingLayers.InsertArrayElementAtIndex(sortingLayers.arraySize);
var newLayer = sortingLayers.GetArrayElementAtIndex(sortingLayers.arraySize - 1);
newLayer.FindPropertyRelative("name").stringValue = layerName;
newLayer.FindPropertyRelative("uniqueID").intValue = (int)System.DateTime.Now.Ticks;
serializedObject.ApplyModifiedProperties();
}
という事でSerializedObject経由でFindPropertyを使って設定できるようです。
uniqueIDの設定方法が少々癖があるっぽいですね。
上記コードは参考資料のコメントのまま記載しましたが、
オレオレライブラリ内でSortingLayerを継続利用したい場合はuniqueIDを名前とワンセットで揃えておいた方が良いかもしれませんね。