来自 Unity 手册:
Unity 允许您为游戏对象和脚本分配自定义图标。这些图标与灯光和相机等项目的内置图标一起显示在场景视图中。使用 Gizmos 菜单 控制如何在场景视图中绘制图标。
此图标也显示在如图所示的场景视图中。但是,如果多个对象具有脚本并且距离较近,则场景视图看起来会很混乱,尤其是在 2D 小控件视图中:
如何从场景视图中删除图标并将其保留在检查器和项目窗口中?
GizmoUtility.SetGizmoEnabled
功能。但没有成功!
我自己已经尝试解决这个问题有一段时间了,自动禁用脚本图标小控件的唯一方法似乎是通过反射禁用特定
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:
如果 Renge 的答案不适合您。尝试使用 type.FullName 代替。在 Unity 6 中为我修复了它。