Unity 自动添加tag,SortingLayers,Layer
来源:互联网 发布:软件测试ppt 编辑:程序博客网 时间:2024/05/16 17:41
momo大神的文章已经写得很详细了,但文章的代码在新版本里已经无法运行了,前几天整理公司SDK,看到自动添加tag的地方,参照momo的做法整理了一版。顺便扩展了一些功能,这里贴出来供大家参考
using UnityEditor;using UnityEngine;public class TagManagerData{ public static string[] tags = new string[] { "momo" }; public static string[] sortingLayers = new string[] { }; public static string[] layers = new string[] { "Blend" };}[InitializeOnLoad]public class AutoWriteSettings{ static AutoWriteSettings() { bool hasKey = PlayerPrefs.HasKey("WriteSettings"); if (hasKey == false) { PlayerPrefs.SetInt("WriteSettings", 1); OnWrite(); } } [MenuItem("Tools/TagTools/Write")] static void OnWrite() { foreach (var tag in TagManagerData.tags) { AddTag(tag); } foreach (var sortingLayer in TagManagerData.sortingLayers) { AddSortingLayer(sortingLayer); } foreach (var layer in TagManagerData.layers) { AddLayer(layer); } } [MenuItem("Tools/TagTools/ClearTags")] static void ClearTags() { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "tags") { it.ClearArray(); tagManager.ApplyModifiedProperties(); return; } } } [MenuItem("Tools/TagTools/ClearSortingLayers")] static void ClearSortingLayers() { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "m_SortingLayers") { it.ClearArray(); tagManager.ApplyModifiedProperties(); return; } } } [MenuItem("Tools/TagTools/ClearLayers")] static void ClearLayers() { 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 = 0; i < it.arraySize; i++) { if (i == 3 || i == 6 || i == 7) continue; SerializedProperty dataPoint = it.GetArrayElementAtIndex(i); dataPoint.stringValue = string.Empty; } tagManager.ApplyModifiedProperties(); return; } } } [MenuItem("Tools/TagTools/ClearAll")] static void ClearAll() { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { it.ClearArray(); tagManager.ApplyModifiedProperties(); } } static void ReadTag() { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "tags") { var count = it.arraySize; for (int i = 0; i < count; i++) { var dataPoint = it.GetArrayElementAtIndex(i); //Debug.Log(dataPoint.stringValue); } } } } static void ReadSortingLayer() { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "m_SortingLayers") { var count = it.arraySize; for (int i = 0; i < count; i++) { var dataPoint = it.GetArrayElementAtIndex(i); while (dataPoint.NextVisible(true)) { if (dataPoint.name == "name") { //Debug.Log(dataPoint.stringValue); } } } } } } static void ReadLayer() { 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 = 0; i < it.arraySize; i++) { if (i == 3 || i == 6 || i == 7) continue; SerializedProperty dataPoint = it.GetArrayElementAtIndex(i); //Debug.Log(dataPoint.stringValue); } } } } static void AddTag(string tag) { if (!isHasTag(tag)) { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "tags") { it.InsertArrayElementAtIndex(it.arraySize); SerializedProperty dataPoint = it.GetArrayElementAtIndex(it.arraySize - 1); dataPoint.stringValue = tag; tagManager.ApplyModifiedProperties(); return; } } } } static void AddSortingLayer(string sortingLayer) { if (!isHasSortingLayer(sortingLayer)) { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "m_SortingLayers") { Debug.Log("SortingLayers" + it.arraySize); it.InsertArrayElementAtIndex(it.arraySize); SerializedProperty dataPoint = it.GetArrayElementAtIndex(it.arraySize-1); while (dataPoint.NextVisible(true)) { if (dataPoint.name == "name") { dataPoint.stringValue = sortingLayer; 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 = 0; i < it.arraySize; i++) { if (i==3||i == 6||i==7) continue; 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 isHasSortingLayer(string sortingLayer) { SerializedObject tagManager = new SerializedObject(AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset")[0]); SerializedProperty it = tagManager.GetIterator(); while (it.NextVisible(true)) { if (it.name == "m_SortingLayers") { for (int i = 0; i < it.arraySize; i++) { SerializedProperty dataPoint = it.GetArrayElementAtIndex(i); while (dataPoint.NextVisible(true)) { if (dataPoint.name == "name") { if (dataPoint.stringValue == sortingLayer) 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; }}
0 0
- Unity 自动添加tag,SortingLayers,Layer
- Unity编程笔录--Unity3D脚本自动添加tag和Layer
- Unity3D脚本自动添加tag和Layer
- Unity3D之脚本自动添加tag和Layer
- Unity之EditorGUILayout-Layer、Tag
- Unity 手动初始化Tag /Layer
- Unity中的layer和tag
- Unity动态添加Tag
- Unity之EditorGUILayout-Layer、Mask、Tag
- Unity导包丢失tag值、layer值
- Tag,Layer跟SortingLayer
- 添加Tag
- 面向组件编程之Unity 4.怎样得到游戏场景中的对象 例如:layer/tag&&SetActive隐藏游戏物体
- Unity编译到Xcode自动添加AppIcon
- Unity 脚本 自动添加 脚本信息
- Unity 脚本 自动添加 脚本信息
- Unity VS脚本自动添加头部注释
- Unity VS脚本自动添加头部注释
- android dagger2使用二
- Java多线程-线程池ThreadPoolExecutor构造方法和规则
- -Xms和-Xmx的值设置成一样 Java不断地吃内存
- 上传图片到 OSS 带压缩图片代码
- poj 3233 Matrix Power Series
- Unity 自动添加tag,SortingLayers,Layer
- 哈密顿绕行世界问题 (深搜(记录路径))
- enum的使用
- HDU 4622 Reincarnation (区间不相同子串个数:字符串哈希 | 后缀数组 | 后缀自动机)
- Android 复制屏幕上画面内容
- hdu4920——Matrix multiplication(矩阵快速幂or循环外提)
- win8下Source Insight has not been installed completely问题的解决
- java-登陆注册案例
- 小知识--背景图片url是data:开头的