MenuItem
MenuItem 屬性用于向主選單和檢視面板背景關系選單添加選單項,
該 MenuItem 屬性能夠將任何靜態函式轉變為選單命令,僅靜態函式可使用 MenuItem 屬性,
要創建熱鍵,您可以使用以下特殊字符:%(在 Windows 上為 ctrl,在 macOS 上為 cmd)、# (shift)、& (alt),如果不需要特殊的修改鍵組合,該鍵可以在下劃線后給出,例如,要創建一個帶有熱鍵 shift-alt-g 的選單,可以使用“MyMenu/Do Something #&g”,要創建帶有熱鍵 g 而不按下修改鍵的選單,則使用“MyMenu/Do Something _g”,
一些特殊的鍵盤鍵可支持作為熱鍵,例如,“#LEFT”可映射到 shift-left,支持這一功能的鍵為:LEFT、RIGHT、UP、DOWN、F1 .. F12、HOME、END、PGUP 和 PGDN,
熱鍵文本前必須有一個空格字符(“MyMenu/Do_g”不能被解釋為熱鍵,而“MyMenu/Do _g”則可以被解釋為熱鍵),
將選單項添加到“GameObject/”選單,以在創建自定義游戲物件時,確保 呼叫 GameObjectUtility.SetParentAndAlign,從而確保在發生背景關系單擊事件時, 對新的游戲物件進行正確地重定父級(請參閱以下示例),您的函式也應該呼叫 Undo.RegisterCreatedObjectUndo,以使創建操作可撤銷并將 Selection.activeObject 設定到新創建的物件上,另請注意,為了將“GameObject/”中的選單項 傳播到層級視圖 Create 下拉選單和層級視圖背景關系選單,它必須與 其他游戲物件創建選單項歸為一組,這可以通過將其優先級 設為 10 來實作(請參閱以下示例),請注意,對于“GameObject/Create Other” 中沒有明確優先級設定且支持舊版專案的 MenuItem 來說,接收到的優先級為 10 而非默認的 1000, 我們建議使用比“Create Other”更具描述性的類別名稱,并將優先級 顯式設定為 10,
using UnityEditor;
using UnityEngine;
public class MenuTest : MonoBehaviour
{
private static bool isCheck = false;
// 在頂部選單欄創建Do Something,點擊呼叫靜態方法
[MenuItem("MyMenu/Do Something")]
static void DoSomething()
{
//打開網站
Application.OpenURL("www.baidu.com");
//打開目錄
EditorUtility.RevealInFinder(Application.persistentDataPath);
}
//可勾選的選單
[MenuItem("MyMenu/SetCheck")]
static void DoSetCheck()
{
isCheck = !isCheck;
Menu.SetChecked("MyMenu/SetCheck", isCheck);
}
// 選單會失效當方法回傳false
[MenuItem("MyMenu/Log Selected Transform Name", true)]
static bool ValidateLogSelectedTransformName()
{
return Selection.activeTransform != null;
}
// 快捷鍵
[MenuItem("MyMenu/Do Something with a Shortcut Key %g")]
static void DoSomethingWithAShortcutKey()
{
EditorApplication.ExecuteMenuItem("MyMenu/Do Something");
}
// 添加選單到Rigidbody上
[MenuItem("CONTEXT/Rigidbody/Double Mass")]
static void DoubleMass(MenuCommand command)
{
Rigidbody body = (Rigidbody)command.context;
body.mass = body.mass * 2;
Debug.Log("Doubled Rigidbody's Mass to " + body.mass + " from Context Menu.");
}
// 添加到GameObject選單上
[MenuItem("GameObject/MyCategory/Custom Game Object", false, 10)]
static void CreateCustomGameObject(MenuCommand menuCommand)
{
GameObject go = new GameObject("Custom Game Object");
// 設定單擊的物體為父物件,為null就是場景下
GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject);
// 注冊可以撤銷創建操作
Undo.RegisterCreatedObjectUndo(go, "Create " + go.name);
Selection.activeObject = go;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/351124.html
標籤:其他
下一篇:簡單的飛機大戰
