Unity处理Hierarchy面板上的一些特殊的对象的特殊标识
来源:互联网 发布:gitlab runner node 编辑:程序博客网 时间:2024/05/21 06:13
孙广东 2015.5.27
转载请注明出处:http://blog.csdn.net/u010019717
要实现下面的效果:、其实主要是要标识一些比较特殊的对象(或者是具有特殊组件的对象)
实现方式就是监听Unity的一些事件被
EditorApplication.hierarchyWindowChanged += HierarchyWindowChanged;
EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
需要指明的是这个类是 AssetPostprocessor的派生类。
资源导入后处理类, 最好不要在这里执行太多费时的操作,否则Unity编辑器会卡顿,是在执行预编译和导入处理在编辑器的右下角都有小圆圈再转会有长时间的卡顿的
using UnityEngine;using System.Collections;using System.Collections.Generic;using System.IO;using DajiaGame.Px;using UnityEditor;/// <summary>/// 导入资源后处理类/// /// 孙广东 现在是处理Hierarchy面板上的一些特殊的对象的特殊标识/// </summary>public class PxCustomHierarchy : AssetPostprocessor{ /// <summary> /// 内部类存储 图标 /// </summary> public static class Icons { public static Texture2D poseBones; public static Texture2D image; public static Texture2D boundingBox; public static Texture2D mesh; public static Texture2D warning; public static void Initialize() { poseBones = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-poseBones.png"); image = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-image.png"); boundingBox = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-boundingBox.png"); mesh = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-mesh.png"); warning = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-warning.png"); } } // 数据 public static string editorPath = ""; public static string editorGUIPath = ""; static Dictionary<int, GameObject> skeletonRendererTable; static Dictionary<int, Canvas> CanvasTable; public static float defaultScale = 0.01f; public static float defaultMix = 0.2f; public static string defaultShader = "Spine/Skeleton"; public static bool initialized; const string DEFAULT_MIX_KEY = "SPINE_DEFAULT_MIX"; // 静态构造函数 static PxCustomHierarchy() {Initialize();}static void Initialize () {defaultMix = EditorPrefs.GetFloat(DEFAULT_MIX_KEY, 0.2f);DirectoryInfo rootDir = new DirectoryInfo(Application.dataPath);FileInfo[] files = rootDir.GetFiles("SpineEditorUtilities.cs", SearchOption.AllDirectories);editorPath = Path.GetDirectoryName(files[0].FullName.Replace("\\", "/").Replace(Application.dataPath, "Assets"));editorGUIPath = editorPath + "/GUI";Icons.Initialize(); CanvasTable = new Dictionary<int, Canvas>();EditorApplication.hierarchyWindowChanged += HierarchyWindowChanged;EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;HierarchyWindowChanged();initialized = true;} static void HierarchyWindowChanged() { CanvasTable.Clear(); Canvas[] boneArr = Object.FindObjectsOfType<Canvas>(); foreach (Canvas b in boneArr) CanvasTable.Add(b.gameObject.GetInstanceID(), b); } /// <summary> /// 根节点在后面显示,否则是在前面 /// </summary> /// <param name="instanceId"></param> /// <param name="selectionRect"></param> static void HierarchyWindowItemOnGUI(int instanceId, Rect selectionRect) { if (CanvasTable.ContainsKey(instanceId)) { if (CanvasTable[instanceId].transform.root == CanvasTable[instanceId].transform) { //MyDebugLog.Log("这是根节点root:" + CanvasTable[instanceId].gameObject.name); Rect r = new Rect(selectionRect); r.x = r.width - 15; r.width = 15; GUI.Label(r, SpineEditorUtilities.Icons.poseBones); } else if (CanvasTable[instanceId] != null) { Rect r = new Rect(selectionRect); r.x -= 26; if (CanvasTable[instanceId].transform.childCount == 0) r.x += 13; r.y += 2; r.width = 13; r.height = 13; GUI.DrawTexture(r, SpineEditorUtilities.Icons.poseBones); } } }}
2 0
- Unity处理Hierarchy面板上的一些特殊的对象的特殊标识
- unity的一些特殊目录
- unity的一些特殊目录
- Unity特殊的文件夹
- 打开一些特殊的系统窗口(如控制面板等)
- 【整理】mysql一些特殊情况的处理
- java字符串的一些特殊处理
- 关于TextView的一些特殊处理
- java 异常处理的一些特殊情况
- Mobile 上pre的特殊处理
- Unity编辑器拓展之三:拓展Unity的Hierarchy面板
- LinearLayout 的一些特殊
- 一些特殊的符号
- 特殊字符的处理
- NAT的特殊处理
- NAT的特殊处理
- NAT的特殊处理
- 特殊字符的处理
- java之系统常用对象总结
- 浅析正则表达式—(原理篇)
- .bashrc文件: ros环境变量设置
- A DOM高级 03 表格隔行变色
- 第13周 《C++语言基础》程序阅读——多态性与抽象类 (1)
- Unity处理Hierarchy面板上的一些特殊的对象的特殊标识
- 为什么采用using namespace std不是一个好主意
- Monkey for iOS
- A DOM高级 04 表格添加行
- 黑马程序员—C重点--运算符
- java之新特性总结
- ACM-简单的输入输出(茵茵的第一课)
- 初学nodejs,搭建简单架构
- Appium IOS 真机测试 iphone