您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
91 行
3.3 KiB
91 行
3.3 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
using System;
|
|
using System.Reflection;
|
|
|
|
namespace GameplayIngredients.Editor
|
|
{
|
|
public static class MenuItems
|
|
{
|
|
const int kSelectMenuPriority = 149;
|
|
const int kPlayMenuPriority = 160;
|
|
const int kMenuPriority = 330;
|
|
|
|
[MenuItem("Edit/Select None &D", priority = kSelectMenuPriority)]
|
|
static void UnselectAll()
|
|
{
|
|
Selection.activeObject = null;
|
|
}
|
|
|
|
[MenuItem("Edit/Play from SceneView Position #%&P", priority = kPlayMenuPriority)]
|
|
static void PlayHere()
|
|
{
|
|
EditorApplication.isPlaying = true;
|
|
}
|
|
|
|
[MenuItem("Edit/Play from SceneView Position #%&P", priority = kPlayMenuPriority, validate = true)]
|
|
static bool PlayHereValidate()
|
|
{
|
|
return PlayFromHere.IsReady;
|
|
}
|
|
|
|
#region TOGGLE GIZMOS
|
|
|
|
static bool s_ShowAllGizmos = true;
|
|
const string kToggleGizmosMenu = "Edit/Show Gizmos #G";
|
|
[MenuItem(kToggleGizmosMenu, priority = kMenuPriority)]
|
|
static void ToggleGizmos()
|
|
{
|
|
s_ShowAllGizmos = !s_ShowAllGizmos;
|
|
SetAllAnnotations(AnnotationType.Gizmo, s_ShowAllGizmos);
|
|
SetAllAnnotations(AnnotationType.Icon, s_ShowAllGizmos);
|
|
Menu.SetChecked(kToggleGizmosMenu, s_ShowAllGizmos);
|
|
}
|
|
|
|
[MenuItem(kToggleGizmosMenu, priority = 600, validate = true)]
|
|
static bool CheckToggleGizmos()
|
|
{
|
|
Menu.SetChecked(kToggleGizmosMenu, s_ShowAllGizmos);
|
|
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
|
|
return true;
|
|
}
|
|
|
|
enum AnnotationType
|
|
{
|
|
Gizmo,
|
|
Icon
|
|
}
|
|
|
|
static void SetAllAnnotations(AnnotationType type, bool value)
|
|
{
|
|
var Annotation = Type.GetType("UnityEditor.Annotation, UnityEditor");
|
|
var ClassId = Annotation.GetField("classID");
|
|
var ScriptClass = Annotation.GetField("scriptClass");
|
|
|
|
Type AnnotationUtility = Type.GetType("UnityEditor.AnnotationUtility, UnityEditor");
|
|
var GetAnnotations = AnnotationUtility.GetMethod("GetAnnotations", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
|
|
var SetGizmoEnabled = AnnotationUtility.GetMethod("SetGizmoEnabled", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
|
|
var SetIconEnabled = AnnotationUtility.GetMethod("SetIconEnabled", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
|
|
|
|
Array annotations = (Array)GetAnnotations.Invoke(null, null);
|
|
foreach (var a in annotations)
|
|
{
|
|
int classId = (int)ClassId.GetValue(a);
|
|
string scriptClass = (string)ScriptClass.GetValue(a);
|
|
|
|
switch (type)
|
|
{
|
|
case AnnotationType.Gizmo:
|
|
SetGizmoEnabled.Invoke(null, new object[] { classId, scriptClass, value ? 1 : 0 });
|
|
break;
|
|
case AnnotationType.Icon:
|
|
SetIconEnabled.Invoke(null, new object[] { classId, scriptClass, value ? 1 : 0 });
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|