UnityはHierarchyパネルの特殊なオブジェクトの特殊な識別を処理します.
孫広東2015.5.27
転載は出典を明記してください.http://blog.csdn.net/u010019717
次の効果を実現するには、主に特殊なオブジェクト(または特殊なコンポーネントを持つオブジェクト)を識別します.
実装方法はUnityのいくつかのイベントを傍受することです
EditorApplication.hierarchyWindowChanged += HierarchyWindowChanged; EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
このクラスがAssetPostprocessorの派生クラスであることを示す必要があります.
リソースインポート後の処理クラスは、ここであまり時間のかかる操作を行わないほうがいいです.そうしないと、Unityエディタはカートンします.プリコンパイルとインポート処理を実行してエディタの右下隅に小さな円があってから、長い間カートンに移籍します.
転載は出典を明記してください.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);
}
}
}
}