unity3d 在Scene Unity中隐藏自定义脚本Gizmo

cvxl0en2  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(313)

摘自Unity手册:

  • Unity允许您为游戏对象和脚本指定自定义图标。这些图标显示在场景视图中,沿着还有内置的灯光和摄像机图标。使用Gizmos menu控制如何在场景视图中绘制图标。*

此图标也显示在“场景视图如图所示”中。但是,如果多个对象具有脚本并且距离较近,则场景视图看起来会很混乱,尤其是在2D Gizmo视图中:

如何从场景视图中移除图标并将其保留在检查器和项目窗口中?
我试过使用GizmoUtility.SetGizmoEnabled函数,但是不起作用!

piah890a

piah890a1#

一段时间以来,我一直试图自己解决这个问题,似乎自动禁用脚本图标Gizmo的唯一方法是通过反射禁用特定MonoBehaviour的图标Gizmo。
我在这里找到了我的解决方案。Acegikmo的最后一个答案给出了一个简洁的方法,完美地解决了这个问题。https://answers.unity.com/questions/851470/how-to-hide-gizmos-by-script.html

static MethodInfo setIconEnabled;
static MethodInfo SetIconEnabled => setIconEnabled = setIconEnabled ??
    Assembly.GetAssembly( typeof(Editor) )
    ?.GetType( "UnityEditor.AnnotationUtility" )
    ?.GetMethod( "SetIconEnabled", BindingFlags.Static | BindingFlags.NonPublic );
 
public static void SetGizmoIconEnabled( Type type, bool on ) {
    if( SetIconEnabled == null ) return;
    const int MONO_BEHAVIOR_CLASS_ID = 114; // https://docs.unity3d.com/Manual/ClassIDReference.html
    SetIconEnabled.Invoke( null, new object[] { MONO_BEHAVIOR_CLASS_ID, type.Name, on ? 1 : 0 } );
}

您只需要从任意位置调用MonoBehaviour的Type方法SetGizmoIconEnabled,它就可以工作了。
另一种方法是在“场景”视图中手动查找“Gizmo”下拉菜单,然后从该菜单禁用脚本Gizmo:

相关问题