news 2026/9/3 2:05:11

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/9/3 1:23:09

22、正则表达式全解析:从基础到高级应用

正则表达式全解析:从基础到高级应用 1. 正则表达式基础 正则表达式是用于匹配字符串模式的强大工具。除了普通字符,正则表达式还包含元字符,用于指定更复杂的匹配规则。常见的元字符有: ^ $ . [ ] { } - ? * + ( ) | \ 。其他字符被视为普通字符,但反斜杠 \ 有特殊…

作者头像 李华
网站建设 2026/9/2 23:27:53

Claude vs ChatGPT vs Gemini: 기능 비교, 사용 경험, 적합 인군

Claude vs ChatGPT vs Gemini: 기능 비교, 사용 경험, 적합 인군 2025년 AI 시대에서 Claude(Anthropic 개발), ChatGPT(OpenAI의 플래그십 제품) 및 Gemini(Google의 AI 모델)는 가장 인기 있는 대형 언어 모델(LLM)이 되었습니다. 이러한 AI 도구는 텍스트 생성, 코딩 및 다…

作者头像 李华
网站建设 2026/9/2 6:05:34

C++继承

一.继承的概念继承是一种可以让代码复用的机制&#xff0c;它在保持原有类结构的基础上进行拓展&#xff0c;增加方法和变量形成新的类&#xff0c;称为派生类。派生类继承的叫做基类。继承定义格式继承按照访问权限符分类类成员/继承方法public继承protect继承private继承基类…

作者头像 李华
网站建设 2026/9/2 2:46:49

量化交易的思路

量化交易&#xff1a;用数据与模型重构投资逻辑在投资市场的演进中&#xff0c;从“凭经验选股”到“用数据决策”的转变&#xff0c;催生了量化交易这一核心范式。它以数学模型为骨架、以海量数据为血肉&#xff0c;将投资逻辑转化为可执行的代码&#xff0c;在波动的市场中寻…

作者头像 李华