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

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

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

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

先來看下最終效果,Hierarchy窗口中,GameObject右側的名稱就是該物體所在的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