Unity中如何隐藏场景视图的自定义脚本Gizmo并保留其他窗口图标?
移除Unity Scene视图自定义图标,保留Inspector/Project窗口图标
问题说明
给脚本或GameObject设置自定义图标后,Unity默认会在Scene视图同步绘制,当挂载同脚本的物体密集时会导致视图杂乱。GizmoUtility.SetGizmoEnabled无效通常是因为参数未精准指向目标脚本的Gizmo类型,或者该函数无法区分不同窗口的图标显隐规则。
有效解决方案
方法1:重写脚本的Gizmo绘制方法(推荐)
当脚本分配了自定义图标后,Unity会通过默认的OnDrawGizmos逻辑绘制图标。重写以下两个方法并留空,就能完全阻止Scene视图的图标绘制,同时不影响Inspector和Project窗口的图标显示。
代码示例:
using UnityEngine; public class YourCustomScript : MonoBehaviour { // 覆盖默认Gizmo绘制逻辑,留空则不绘制任何内容 void OnDrawGizmos() { } // 若需要选中物体时也不显示图标,同样留空该方法 void OnDrawGizmosSelected() { } }
原理:Unity优先执行脚本内自定义的OnDrawGizmos方法,默认的图标绘制逻辑会被覆盖,从而实现Scene视图图标隐藏,其他窗口不受影响。
方法2:精准控制Gizmo显隐(代码方式)
如果想用GizmoUtility.SetGizmoEnabled,需要确保传入正确的脚本类型参数,单独关闭该脚本对应的Scene视图Gizmo(包括图标):
using UnityEngine; using UnityEditor; [InitializeOnLoad] public static class GizmoToggle { static GizmoToggle() { // 替换为你的目标脚本类型 GizmoUtility.SetGizmoEnabled(typeof(YourCustomScript), false); } }
注意:此代码需放在Editor目录下,依赖UnityEditor命名空间,仅在编辑模式生效。
方法3:手动关闭Gizmo菜单选项
在Scene视图右上角的Gizmos菜单中,找到对应脚本的名称,取消勾选即可关闭该脚本的Scene视图图标,操作简单但无法批量或通过代码控制。
内容的提问来源于stack exchange,提问作者Obscure021
相关产品推荐
相关产品推荐

