前言
在Unity项目开发过程中,当前场景的资源会在Hierarchy面板中进行管理,我们会通过在此面板中选择对应的GameObject进行操作,例如激活隐藏等,我们需要选中一个物体在Inspector面板上进行激活和隐藏或者查看当前物体的详细信息,有时需要多此操作并且不好分辨,这时我们可以通过扩展Hierarchy面板实现一些使用的功能来满足自己的需求。
一、效果演示(编辑器扩展—Hierarchy面板扩展)
二、实现方式
简言
话不多说了,直接上代码,将此脚本放在名为Editor的文件夹目录下即可,代码为范例类,大家可以根据自己的需求自行修改和探索。
代码
演示效果同款代码(示例):
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using UnityEngine.UI;
using TMPro;
using UnityEngine.EventSystems;
/// <summary>
/// Unity Hierarchy窗口增强工具
/// 用于在Hierarchy窗口中显示额外的组件图标和控制功能
/// [InitializeOnLoad]特性确保编辑器加载时自动初始化此类
/// </summary>
[InitializeOnLoad]
public class EnhancedHierarchy
{
// 缓存图标纹理
private static Dictionary<string, Texture> iconCache = new();
// 自定义样式
private static GUIStyle buttonStyle;
/// <summary>
/// 静态构造函数,用于在编辑器加载时初始化
/// </summary>
static EnhancedHierarchy()
{
EditorApplication.hierarchyWindowItemOnGUI += HierarchyWindowItemOnGUI;
}
/// <summary>
/// 确保样式已初始化
/// </summary>
private static void EnsureStylesInitialized()
{
buttonStyle ??= new GUIStyle(EditorStyles.miniButton)
{
padding = new RectOffset(2, 2, 0, 0),
fontSize = 10,
alignment = TextAnchor.MiddleCenter
};
}
/// <summary>
/// 在Hierarchy窗口中绘制每个项目
/// </summary>
/// <param name="instanceID">实例ID</param>
/// <param name="selectionRect">选择矩形</param>
private static void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
{
EnsureStylesInitialized();
// 获取当前选中的GameObject
GameObject go