1.MenuItem 屬性
MenuItem(string itemName, bool isValidateFunction, int priority)
-
itemName:菜單名稱路徑
- 特殊路徑:
- CONTEXT: 為組件添加菜單項(xiàng)
- Assets: 對應(yīng)頂部菜單 Assets,并添加 Project 面板右鍵菜單
- GameObject: 對應(yīng)頂部菜單 GameObject,priority 值在1~49時(shí),添加 Hierarchy 面板右鍵菜單
- Component: 對應(yīng)頂部菜單 Component,對應(yīng) Inspector 面板的 Add Component 窗口。但是不知道怎么用,用 AddComponentMenu 吧
- 特殊路徑:
- isValidateFunction:不寫為false,true則點(diǎn)擊菜單前就會調(diào)用
- priority:菜單項(xiàng)顯示排序 默認(rèn) 1000
2.創(chuàng)建多級菜單
[MenuItem("一級菜單/二級菜單上/三級菜單")]
static void MenuOne()
{
//功能
}
[MenuItem("一級菜單/二級菜單下")]
static void MenuTwo()
{
//功能
}
3.創(chuàng)建帶快捷鍵的菜單
- 在 MenuItem 的雙引號菜單路徑最后+空格+快捷鍵字符
- 快捷鍵可任意組合使用
- 英文字母 :_字母 (不區(qū)分大小寫)
- 常用快捷鍵:
符號 | 字符 |
---|---|
% | Ctr/Command |
# | Shift |
& | Alt |
LEFT/Right/UP/DOWN | 方向鍵 |
F1-F2 | F功能鍵 |
_g | 字母g |
[MenuItem("一級菜單/二級菜單上 #_A")]
static void MenuA()
{
Debug.Log("A");
}
[MenuItem("一級菜單/二級菜單中 %#_B")]
static void MenuB()
{
Debug.Log("B");
}
[MenuItem("一級菜單/二級菜單下 %&_C")]
static void MenuC()
{
Debug.Log("B");
}
4.創(chuàng)建可被勾選的菜單
//設(shè)置勾選狀態(tài)
//Menu.SetChecked(string menuPath, bool isChecked)
//獲取勾選狀態(tài)
//Menu.GetChecked(string menuPath)
[MenuItem("一級菜單/二級菜單上 #_A")]
static void MenuA()
{
string menuPath = "一級菜單/二級菜單上 #_A";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
[MenuItem("一級菜單/二級菜單中 %#_B")]
static void MenuB()
{
string menuPath = "一級菜單/二級菜單中 %#_B";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
[MenuItem("一級菜單/二級菜單下 %&_C")]
static void MenuC()
{
string menuPath = "一級菜單/二級菜單下 %&_C";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
5.檢查菜單是否使用
[MenuItem("菜單路徑名")]
static void 方法() { }
[MenuItem("菜單路徑名"),true]
static void 驗(yàn)證方法()
{
return bool值; //返回true 改菜單啟用
}
[MenuItem("一級菜單/二級菜單上")]
static void MenuA()
{
string menuPath = "一級菜單/二級菜單上";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
[MenuItem("一級菜單/二級菜單中")]
static void MenuB()
{
string menuPath = "一級菜單/二級菜單中";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
EditorPrefs.SetBool("MenuCValidate", isChecked);
}
[MenuItem("一級菜單/二級菜單下")]
static void MenuC()
{
string menuPath = "一級菜單/二級菜單下";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
[MenuItem("一級菜單/二級菜單下", true)]
static bool MenuCValidate()
{
bool flag = EditorPrefs.GetBool("MenuCValidate");
Menu.SetChecked("一級菜單/二級菜單中", flag);
return flag;
}
6.菜單排序
- 在priority 小的位置在上方 不配置默認(rèn)為1000
- 當(dāng)相鄰兩個(gè)菜單的 priority 值差距超過10時(shí) 就會分組 中間出現(xiàn)一條橫線
- 多級菜單的 priority 按照子級里面最小的 priority 算
[MenuItem("一級菜單/二級菜單上", false, 3)]
static void MenuA()
{
string menuPath = "一級菜單/二級菜單上";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
[MenuItem("一級菜單/二級菜單中", false, 2)]
static void MenuB()
{
string menuPath = "一級菜單/二級菜單中";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
[MenuItem("一級菜單/二級菜單下", false, 1)]
static void MenuC()
{
string menuPath = "一級菜單/二級菜單下";
bool isChecked = !Menu.GetChecked(menuPath);
Menu.SetChecked(menuPath, isChecked);
}
7.擴(kuò)展右鍵菜單
7.1 Hierarchy 右鍵菜單
- Hierarchy 右鍵菜單是菜單欄的 GameObject 菜單欄下的菜單,并且 priority 在 1~49 范圍內(nèi).
[MenuItem("GameObject/二級菜單", false, 1)]
static void MenuA()
{
}
7.2 Project 右鍵菜單
- Project 右鍵菜單是菜單欄的 Assets 菜單欄下的菜單
[MenuItem("Assets/二級菜單", false, 1)]
static void MenuA()
{
}
文章來源:http://www.zghlxwxcb.cn/news/detail-777795.html
7.3 Inspector 組件右鍵菜單
- 組件右鍵菜單是使用特殊路徑 CONTEXT 創(chuàng)建的
- MenuCommand 可以獲取到該組件
[MenuItem("CONTEXT/組件名/菜單名")]
static void 方法名(MenuCommand cmd)
{
//組件名 t = cmd.context as 組件名;
//對該組件進(jìn)行操作
}
[MenuItem("CONTEXT/Transform/Reset功能")]
static void ClearTransformMenu(MenuCommand cmd)
{
Transform t = cmd.context as Transform;
t.position = Vector3.zero;
t.rotation = Quaternion.identity;
t.localScale = Vector3.zero;
GameObject obj = new GameObject();
obj.transform.parent = t.gameObject.transform;
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-777795.html
-
注意:
- 菜單檢查 在 Hierarchy 右鍵菜單里面,檢查沒有效果,但是在頂上菜單和 Project 右側(cè)里面可以用。
8. AddComponentMenu 特性
- AddComponentMenu 直接加載類上,會自動將菜單加到 Component 下,并加在 Inspector 面板的 AddComponentMenu 里.
AddComponentMenu(string menuName, int order)
menuName:菜單名路徑
order:菜單項(xiàng)排序
[AddComponentMenu("自定義/Test", 1)]
public class Test : MonoBehaviour
{
}
9. ContextMenu 特性 添加組件右鍵菜單
ContextMenu(string itemName, bool isValidateFunction, int priority)
itemName:菜單名稱
isValidateFunction:不寫為false,true則點(diǎn)擊菜單前就會調(diào)用
priority:菜單項(xiàng)顯示排序 默認(rèn) 1000000
[AddComponentMenu("自定義/Test", 1)]
public class Test : MonoBehaviour
{
[ContextMenu("添加空物體")]
public void AddGameObject()
{
transform.position = Vector3.zero;
transform.rotation = Quaternion.identity;
transform.localScale = Vector3.zero;
GameObject obj = new GameObject();
obj.transform.parent = transform;
}
}
到了這里,關(guān)于Unity 編輯器篇|(一)MenuItem菜單欄的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!