当前位置: 首页 > news >正文

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 面板会自动定位并高亮该物体。
http://www.jsqmd.com/news/89327/

相关文章:

  • 二、python语法基础
  • HyperLPR3 车牌识别(python3)
  • 使用cmake构建Cplusplus版运行时库-–-behaviac
  • pytesseract 中英文 识别图片文字
  • 开源高性能IM+集成AI能力,基于SpringBoot +Tauri+Vue 3+TypeScript支持全平台与丰富会话模式
  • 基于 GEE 的 Landsat 8 数据构建遥感生态指数(RSEI)并进行生态质量评估
  • FOC开发工具学习
  • 类和对象(上)
  • 智能体开发系统学习实践
  • 马上2026年了,copilot还能用吗?
  • mysql中的索引页是什么?
  • 数据页和索引页有什么区别?
  • 《终极金钱心智》
  • 一文讲透XGBoost:从原理到实践的完整指南
  • 第13章:项目资源管理【章节重点】
  • EGSTalker踩坑日记第一弹
  • 图文详述:MySQL的下载、安装、部署、使用
  • 第14章:项目沟通管理【章节重点】
  • C#+VisionMaster联合开发(六)_控制器
  • Pelco KBD300A 模拟器:05.校验算法终极对比 + 完整 100+ 指令封装 + KBD300A 所有隐藏功能函数化
  • AI 如何从配置历史与变更日志中推理出“变更引发的故障”——自动化根因分析的因果推理引擎
  • 题目集4~5以及课堂测验的总结性Blog
  • 234回文链表
  • 练题100天——DAY26:汇总区间+丢失的数字+数组交集
  • 2025动漫剧本推荐,无需成本轻松创作
  • 22、正则表达式全解析:从基础到高级应用
  • 推荐一种并发线程中资源同步常用方法
  • 24、文本处理工具的使用与技巧
  • C#+VisionMaster联合开发(七)_通讯管理
  • Flutter 2025:从架构革命到商业落地,全面解析跨平台开发的“黄金时代”