内容将会持续更新,有错误的地方欢迎指正,谢谢!
拥有更好的学习体验 —— 不断努力,不断进步,不断探索 |
助力快速掌握 Hierarchy 面板扩展 为初学者节省宝贵的学习时间,避免困惑! |
文章目录
一、Hierarchy菜单扩展
1、拓展菜单(GameObject)
通过 MenuItem 属性,可以在Hierarchy窗口上下文菜单中将菜单项添加到“GameObject/”菜单。
MenuItem 属性能够将任何静态函数转变为菜单命令。仅静态函数可使用 MenuItem 属性。
之前已经写过相关文章:
https://blog.youkuaiyun.com/caiprogram123/article/details/133953622#6GameObject_593
2、GenericMenu自定义菜单扩展
当右键点击 Hierarchy 视图中的 GameObject 时,将创建一个包含 “Option 1” 和 “Option 2” 两个选项的 GenericMenu 菜单,并在点击时触发相应的方法。
之前已经写过相关文章:
https://blog.youkuaiyun.com/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<