Unity编辑器扩展之Hierarchy面板扩展

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

Unity编辑器扩展之Hierarchy面板扩展
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 Hierarchy 面板扩展

为初学者节省宝贵的学习时间,避免困惑!


文章目录

  • 一、Hierarchy菜单扩展
    • 1、拓展菜单(GameObject)
    • 2、GenericMenu自定义菜单扩展
  • 二、EditorApplication.hierarchyChanged 之自动重命名重复对象名称
  • 三、EditorApplication.hierarchyWindowItemOnGUI 之布局扩展
    • 1、绘制ActiveToggle
    • 2、绘制Static静态标记
    • 3、绘制组件的Icon
    • 4、重绘对象名称


一、Hierarchy菜单扩展


1、拓展菜单(GameObject)


通过 MenuItem 属性,可以在Hierarchy窗口上下文菜单中将菜单项添加到“GameObject/”菜单。

MenuItem 属性能够将任何静态函数转变为菜单命令。仅静态函数可使用 MenuItem 属性。

之前已经写过相关文章:
https://blog.csdn.net/caiprogram123/article/details/133953622#6GameObject_593

2、GenericMenu自定义菜单扩展


当右键点击 Hierarchy 视图中的 GameObject 时,将创建一个包含 “Option 1” 和 “Option 2” 两个选项的 GenericMenu 菜单,并在点击时触发相应的方法。

之前已经写过相关文章:
https://blog.csdn.net/caiprogram123/article/details/135373693#Hierarchy_172



二、EditorApplication.hierarchyChanged 之自动重命名重复对象名称


EditorApplication.hierarchyChanged 是 Unity 编辑器中的一个事件,用于检测和响应场景层级(Hierarchy)中的变化。

当场景中的对象被添加、删除、重命名,或对象的父子关系发生变化时,Unity 会触发 hierarchyChanged 事件。

这使得开发者能够在这些变化发生时执行自定义逻辑,如自动重命名对象、更新层级视图中的图标或状态、同步层级结构与外部数据等。

using UnityEditor;
using UnityEngine;
using System.Linq;

public class AutoRenameDuplicateObjects
{
   
    [InitializeOnLoadMethod]
    static void Initialize()
    {
   
        EditorApplication.hierarchyChanged += OnHierarchyChanged;
    }

    private static void OnHierarchyChanged()
    {
   
        // 查找场景中的所有对象
        GameObject[] allObjects = Object.FindObjectsOfType<GameObject>();

        // 按照父对象分组,检查每个组中是否有重复名称的对象
        foreach (var parentGroup in allObjects.GroupBy(obj => obj.transform.parent))
        {
   
        	if(parentGroup.Count() < 2) continue;
        	
            // 对同一层级的对象按照Hierarchy中的顺序排序
			var sortedGroup = parentGroup.OrderBy(obj => obj.transform.GetSiblingIndex()).ToList();

			var duplicates = sortedGroup.GroupBy(obj => obj.name)
                            .Where(group => group.Count() > 1);
            foreach (var duplicateGroup in duplicates)
            {
   
                int index = 1;
                foreach<

你可能感兴趣的:(Unity编辑器扩展,unity,编辑器,Hierarchy,绘制ICON,编辑器扩展,Editor,菜单)