在场景Unity中隐藏自定义脚本Gizmo

问题描述 投票:0回答:2

来自 Unity 手册:

Unity 允许您为游戏对象和脚本分配自定义图标。这些图标与灯光和相机等项目的内置图标一起显示在场景视图中。使用 Gizmos 菜单 控制如何在场景视图中绘制图标。

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

upload_2022-12-25_15-22-28.png

如何从场景视图中删除图标并将其保留在检查器和项目窗口中?

我尝试过使用

GizmoUtility.SetGizmoEnabled
功能。但没有成功!

c# unity-game-engine scene
2个回答
1
投票

我自己已经尝试解决这个问题有一段时间了,自动禁用脚本图标小控件的唯一方法似乎是通过反射禁用特定

MonoBehaviour
的图标小控件。

我在这里找到了解决方案。 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 } );
}

您只需从任何地方为

SetGizmoIconEnabled
的类型调用方法
MonoBehaviour
即可,它应该可以工作。


另一种方法是在场景视图中手动找到 Gizmo 下拉菜单并从那里禁用脚本 Gizmo:

enter image description here


0
投票

如果 Renge 的答案不适合您。尝试使用 type.FullName 代替。在 Unity 6 中为我修复了它。

© www.soinside.com 2019 - 2024. All rights reserved.