助力快速掌握編輯器對 Unity Hierarchy 的擴展、及效果展示 爲初學者節省寶貴的時間,避免採坑! |
我們的初衷是將一種簡單的生活方式帶給世人 使有限時間 具備無限可能 |
Chinar 教程效果:
Intro —— 簡介
爲了開發的便利性,我們經常要使用的是 Hierarchy 右鍵菜單,操控不同的遊戲對象
那麼爲了方便,我們就可對現有的 Hierarchy 右鍵菜單進行擴展
我們可根據選擇對象條件進行重製,自行定義功能和排序
下圖是對預設物進行操作時,彈出新菜單
2
HierarchyWindowItemOnGUI —— 新建 Hierarchy 右鍵菜單
我們通過委託 HierarchyWindowItemOnGUI 即可將右鍵重繪新右鍵菜單
右鍵 Hierarchy 時,菜單顯示爲我們指定的的 菜單項
這裏其實就是將右鍵菜單項,指向我們已經創建好的 菜單欄的某一項列表
可根據不同條件,指向不同菜單
下面例子,當點擊對象爲預設物時,可直接打開預設物
僞代碼
using UnityEditor;
using UnityEngine;
/// <summary>
/// Chinar編輯器 增強層次面板
/// </summary>
public class ChinarEditorHierarchy
{
[MenuItem("Hierarchy/Chinar/打開預設", true, -1)]
static bool 打開預設Alternative()
{
return Selection.objects.Length == 1;
}
[MenuItem("Hierarchy/Chinar/打開預設", false, 0)]
static void 打開預設()
{
if (Selection.activeGameObject) AssetDatabase.OpenAsset(Resources.Load("Prefab/ModelPrefabs/" + Selection.activeGameObject.name));
}
[InitializeOnLoadMethod]
static void StartInitializeOnLoadMethod()
{
EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;
}
static void OnHierarchyGUI(int instanceID, Rect selectionRect)
{
if (Event.current != null && selectionRect.Contains(Event.current.mousePosition) && Event.current.button == 1 && Event.current.type <= EventType.MouseUp)
{
GameObject selectedGameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
//這裏寫 彈出新右鍵菜單的條件
//爲了便於理解,這裏我做的是 名字包含"Cube"且選擇對象數量爲 1
if (selectedGameObject != null && selectedGameObject.name.Contains("Cube") && 打開預設Alternative())
{
Vector2 mousePosition = Event.current.mousePosition;
EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), "Hierarchy/Chinar", null);
Event.current.Use();
}
}
}
}
}
支持
May Be —— 開發者,總有一天要做的事!
Chinar 提供一站式《零》基礎教程 使有限時間 具備無限可能! |
Chinar 免費服務器、建站教程全攻略!( Chinar Blog )
本博客爲非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均爲本人所擁有,本人保留所有法定權利。違者必究
對於需要複製、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯繫,留言,Email: [email protected]
對於經本博主明確授權和許可使用文章及內容的,使用時請註明文章或內容出處並註明網址