標籤:
using UnityEngine;using System.Collections;using UnityEditor;public class ClipEventEditor : EditorWindow{ /// <summary> /// MenuItem屬性允許你添加功能表項目到主菜單和檢視面板操作功能表 /// MenuItem屬性把任意靜態函數變成為一個功能表命令。僅靜態函數能使用這個MenuItem屬性。 /// 可以使用一下指定字元建立熱鍵:% (Windows上為ctrl, OS X上為cmd), # (shift), & (alt), _ (無修改鍵)。 /// 例如建立一個菜單熱鍵為shift-alt-g使用GameObject/Do Something #&g。 /// 建立一個菜單熱鍵g並沒有修改鍵(按鍵組合),使用GameObject/Do Something _g。 /// 熱鍵文本必須在前面加一個空白字元(GameObject/Do_g不會被解釋為熱鍵,而是GameObject/Do _g這樣,注意_g前面有空格)。 /// /// 注意:這是一個編輯器類,如果想使用它你需要把它放到工程目錄下的Assets/Editor檔案夾下。 /// 編輯器類在UnityEditor命名空間下。所以當使用C#指令碼時,你需要在指令碼前面加上 "using UnityEditor"引用。 /// </summary> [MenuItem("Tools/ClipEventEditor %1", false)]//快速鍵Ctrl+1 static void Show() { //static function GetWindow.<T> (utility : bool, title : string, focus : bool) : T //返回螢幕上類型T的當前的第一個編輯器視窗。 //如果沒有,建立並顯示新的視窗並返回它的執行個體。 //utility設定為真,來建立一個浮動視窗;為假,建立一個標準視窗。 //title 如果GetWindow建立一個新的視窗,它將擷取這個標題。如果這個值為null,使用類名作為標題。 GetWindow<ClipEventEditor>(true, "編輯器"); } public AnimationClip Clip; public GameObject Obj; void OnGUI() { GUILayout.Label("動畫事件編輯器"); //EditorGUILayout.ObjectField:製作一個物體欄位。可以指定物體無論是通過拖拽物體或通過物體拾取器選擇物體。 Clip = (AnimationClip)EditorGUILayout.ObjectField(Clip, typeof(AnimationClip), true); Obj = (GameObject)EditorGUILayout.ObjectField(Obj, typeof(GameObject), true); if (Clip) { var Events = AnimationUtility.GetAnimationEvents(Clip); if (GUILayout.Button("顯示隱藏事件")) { for (int i = 0; i < Events.Length; i++) { if (float.IsInfinity(Events[i].time)) { Events[i].time = 0; } } //TODO ...儲存修改 } } }}
EditorWindow 和MenuItem