news 2026/8/1 23:53:17

unity3d scene窗口选中物体, 在 hierarchy高光显示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
unity3d scene窗口选中物体, 在 hierarchy高光显示

在 Unity 中实现 “Scene 窗口选中物体时 Hierarchy 面板高光显示”,核心思路是监听 Scene 窗口的选择事件,并通过 Unity 的EditorGUIUtilityEditorWindow相关 API 主动高亮 Hierarchy 面板中对应的物体条目。以下是完整的实现方案:

using UnityEditor; using UnityEngine; using System.Reflection; /// <summary> /// Scene选中物体时,Hierarchy面板自动高光显示该物体 /// </summary> [InitializeOnLoad] public class HierarchyHighlightOnSceneSelect { // 静态构造函数,Editor启动时初始化 static HierarchyHighlightOnSceneSelect() { // 监听选择变更事件 Selection.selectionChanged += OnSelectionChanged; } private static void OnSelectionChanged() { // 仅处理选中单个GameObject的情况(可根据需求修改为多物体) if (Selection.activeGameObject != null) { // 核心API:让Hierarchy高亮并滚动到目标物体 EditorGUIUtility.PingObject(Selection.activeGameObject); // 【可选】强制刷新Hierarchy窗口(解决部分版本高亮不生效问题) RefreshHierarchyWindow(); } } /// <summary> /// 强制刷新Hierarchy窗口(通过反射调用私有方法) /// </summary> private static void RefreshHierarchyWindow() { try { // 获取Hierarchy窗口实例 EditorWindow hierarchyWindow = EditorWindow.GetWindow(Type.GetType("UnityEditor.SceneHierarchyWindow, UnityEditor")); if (hierarchyWindow == null) return; // 通过反射调用Hierarchy窗口的刷新方法 MethodInfo refreshMethod = hierarchyWindow.GetType().GetMethod("Refresh", BindingFlags.NonPublic | BindingFlags.Instance); refreshMethod?.Invoke(hierarchyWindow, null); } catch (System.Exception e) { Debug.LogWarning("刷新Hierarchy失败:" + e.Message); } } // 【可选】防止内存泄漏,编辑器关闭时移除事件监听 [InitializeOnLoadMethod] private static void Cleanup() { AssemblyReloadEvents.beforeAssemblyReload += () => { Selection.selectionChanged -= OnSelectionChanged; }; } } /* * 1. 支持多物体选中高亮 * 修改OnSelectionChanged方法,遍历所有选中物体: * private static void OnSelectionChanged() { if (Selection.gameObjects.Length > 0) { // 高亮最后一个选中的物体(Unity默认选中逻辑) GameObject target = Selection.gameObjects[Selection.gameObjects.Length - 1]; EditorGUIUtility.PingObject(target); RefreshHierarchyWindow(); } } */ /* * 2. 自定义高亮样式(进阶) * 如果需要自定义高亮颜色 / 效果(如边框、背景色),需重写 Hierarchy 的绘制逻辑: // 在原有类中添加以下代码 static HierarchyHighlightOnSceneSelect() { Selection.selectionChanged += OnSelectionChanged; // 注册Hierarchy绘制回调 EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyItemGUI; } private static void OnHierarchyItemGUI(int instanceID, Rect selectionRect) { // 获取当前绘制的物体 GameObject go = EditorUtility.InstanceIDToObject(instanceID) as GameObject; if (go == null) return; // 如果是选中的物体,绘制自定义高亮 if (Selection.Contains(go)) { // 绘制高亮背景 EditorGUI.DrawRect(selectionRect, new Color(0.2f, 0.5f, 1f, 0.3f)); // 绘制边框 Rect borderRect = selectionRect; borderRect.width = 2; EditorGUI.DrawRect(borderRect, Color.cyan); } } */

使用说明

  1. 将脚本放在 Unity 项目的Editor文件夹下(若无则新建);
  2. 无需附加到任何物体,Editor 启动时自动生效;
  3. 在 Scene 窗口点击选中物体,Hierarchy 面板会自动定位并高亮该物体。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 22:26:42

智能体开发系统学习实践

智能体开发不是 AI 算法问题,而是一个“不稳定智能组件”的系统工程问题。作为一名资深 Java 开发工程师,在进入 智能体(AI Agent)方向时,最大的优势是:工程能力、系统设计能力、并发与分布式经验。真正需要补的不是“再学一门语言”,而是 AI 思维 + Agent 架构 + LLM 工…

作者头像 李华
网站建设 2026/8/1 10:00:11

第13章:项目资源管理【章节重点】

信息系统项目管理师第13章&#xff1a;项目资源管理【章节重点】。重点章节&#xff1a;不论是单选、案例分析还是论文都是考点&#xff0c;本视频由科科过软考整理制作。 第13章&#xff1a;项目资源管理【章节重点】

作者头像 李华
网站建设 2026/8/1 0:00:15

AI 如何从配置历史与变更日志中推理出“变更引发的故障”——自动化根因分析的因果推理引擎

AI 如何从配置历史与变更日志中推理出“变更引发的故障”——自动化根因分析的因果推理引擎在超大规模网络的运维世界里&#xff0c;最令人心悸的时刻&#xff0c;往往不是监控屏上一片飘红的“宕机”&#xff0c;而是监控指标一片祥和&#xff0c;业务投诉却如雪片般飞来。这是…

作者头像 李华
网站建设 2026/8/1 11:36:52

21、数据存档、备份与正则表达式应用全解析

数据存档、备份与正则表达式应用全解析 1. 数据存档与备份工具 在数据管理中,存档和备份是至关重要的操作,能确保数据的安全性和可恢复性。以下将介绍几种常用的工具及其使用方法。 1.1 tar 工具 现代 GNU tar 版本支持直接使用 gzip 和 bzip2 压缩。使用 z 和 j 选项,分…

作者头像 李华