Unity3D 在Hierarchy窗口中顯示物體所屬Layer

我們想要查看場景中物體的Layer時,需要在Hierarchy窗口中點擊GameObject,然後才能在Inspector中顯示Layer等相關屬性,

當場景物體多的時候,這個操作還是比較麻煩的。那麼有沒有一種方式可以方便直觀查看所屬Layer呢。

今天我們就利用EditorApplication.hierarchyWindowItemOnGUI 這個接口來實現直接在Hierarchy窗口中顯示物體Layer。

先來看下最終效果,Hierarchy窗口中,GameObject右側的名稱就是該物體所在的Layer名稱。


Unity3D 在Hierarchy窗口中顯示物體所屬Layer


實現如下:

using UnityEditor;
using UnityEngine;
// 
/// Hierarchy Window Layer Info
/// http://diegogiacomelli.com.br/unitytips-hierarchy-window-layer-info/
/// 
[InitializeOnLoad]
public static class HierarchyWindowLayerInfo
{
 static readonly int IgnoreLayer = LayerMask.NameToLayer("Default");
 static readonly GUIStyle _style = new GUIStyle()
 {
 fontSize = 9,
 alignment = TextAnchor.MiddleRight
 };
 static HierarchyWindowLayerInfo()
 {
 EditorApplication.hierarchyWindowItemOnGUI += HandleHierarchyWindowItemOnGUI;
 }
 static void HandleHierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
 {
 var gameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
 if (gameObject != null)
 {
 EditorGUI.LabelField(selectionRect, LayerMask.LayerToName(gameObject.layer), _style);
 }
 }
}

靜態類添加[InitializeOnLoad]屬性,在Unity編輯器啟動的時候就可以執行 同名靜態構造函數static HierarchyWindowLayerInfo()

EditorApplication.hierarchyWindowItemOnGUI 接口有兩個參數,第一個為object的 InstanceId,第二個為對應的顯示區域。

Delegate to be called for every visible list item in the HierarchyWindow on every OnGUI event.

hierarchy窗口中的每個可見物體的OnGUI事件觸發時,這個函數都會被調用。

通過這個接口,我們可以實現其他很多定製需求。

官方文檔 https://docs.unity3d.com/ScriptReference/EditorApplication.HierarchyWindowItemCallback.html

Unity技術交流 微信公眾號 UnityAsk,QQ群:891555732


分享到:


相關文章: