AddLayer和AddTag
using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class LayerTagSpawn : AssetPostprocessor { static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { foreach (string s in importedAssets) { if (s.Contains("HandleController")) { AddLayer("dragLayer"); AddLayer("terrain"); return; } } } static void AddTag(string tag) { if (!isHasTag(tag)) { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); int index = 0; bool bFindTag = false; while (it.NextVisible(true)) { if (it.name == "tags") { for (int i = 0; i < it.arraySize; i++) { index++; SerializedProperty dataPoint = it.GetArrayElementAtIndex(i); if (string.IsNullOrEmpty(dataPoint.stringValue)) { dataPoint.stringValue = tag; tagManager.ApplyModifiedProperties(); bFindTag = true; return; } } if (!bFindTag) { it.InsertArrayElementAtIndex(index); SerializedProperty property = it.GetArrayElementAtIndex(index); property.stringValue = tag; tagManager.ApplyModifiedProperties(); return; } } } } } static void AddLayer(string layer) { if (!isHasLayer(layer)) { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "layers") { for (int i = 8; i <= 31; i++) { SerializedProperty dataPoint = it.GetArrayElementAtIndex(i); if (string.IsNullOrEmpty(dataPoint.stringValue)) { dataPoint.stringValue = layer; tagManager.ApplyModifiedProperties(); return; } } } } } } static bool isHasTag(string tag) { for (int i = 0; i < UnityEditorInternal.InternalEditorUtility.tags.Length; i++) { if (UnityEditorInternal.InternalEditorUtility.tags[i].Contains(tag)) return true; } return false; } static bool isHasLayer(string layer) { for (int i = 0; i < UnityEditorInternal.InternalEditorUtility.layers.Length; i++) { if (UnityEditorInternal.InternalEditorUtility.layers[i].Contains(layer)) return true; } return false; } }