1. 插件擴展
1.1. 命名空間
using UnityEditor;
using UnityEngine; //非必需,常用到
1.2. 使用語法
[MenuItem("Assets/My Test")]
private static void Test()
{
Debug.Log("Hello World!")
}
語法說明
[MenuItem("path $t", Is, Priority)]
private static void Test1()
{}
[MenuItem("path _t", Is, Priority)]
private static void Test2()
{}
- path 是菜單路徑;
- 一級菜單名稱不支持中文
- $t 是一個快捷鍵實例,在路徑后面接空格,然后加上快捷鍵表示,單純的一個按鍵快捷鍵按鍵字符前帶下划線。該項非必需
%
表示ctrl
#
表示shift
&
表示alt
- Is 設置為true的時候,如果沒有選中游戲對象,會顯示不可用狀態,該選項非必需
- Priority 是優先級,數值越小優先級越高,非必需,其默認值為1000。
下面表示快捷鍵為"ctrl+h" 的實例。
[MenuItem("Assets/My Test %h")]
private static void Test()
{
Debug.Log("Hello World!")
}
1.3. Selection類
https://docs.unity3d.com/ScriptReference/Selection.html
1.3.1. 獲取選中物體
Selection.Objects
可以獲得選中的物品。
1.3.2. 獲取選中目錄
string[] guids = Selection.assetGUIDs;
foreach ( var id in guids )
{
string path = AssetDatabase.GUIDToAssetPath(id);
if(Directory.Exists(path))
{
Debug.Log(string.format("Directory {0} exist", path))
}
}
1.4. 給控件添加右上角齒輪菜單增加功能
[MenuItem("CONTEXT/Rigidbody/wyg_test")]
private static TestRightButton()
{
Debug.Log("右鍵測試")
}
- CONTEXT 為固定寫法;
- Rigidbody 是控件名稱,可以修改為其他控件;
- 我使用中文的時候不知道為什么沒有顯示出來。
1.5. 彈窗
編輯器的彈窗類需要繼承EditorWindow
。
使用方法與GUI的使用方法基本一致,有Init,Awake,OnGUI等函數。
class TestWindow : EditorWindow
{
public void Init()
{
}
publick void OnGUI()
{
GUILayout.Label("Test Window");
if (GUILayout.Button("Button"))
{
Debug.Log("On Button")
}
}
}
2. 組件屬性展示
以下效果都是組件的顯示,所以是屬於using UnityEngine;
的。
2.1. Range
可以將數值的展示效果變成滑動條效果。
[Range(1, 12)]
public int month;
2.2. Multiline/TextArea
控制占用多行顯示。
[Multiline(5)]
public string msg1;
[TextArea(3,5)]
public string msg2; // 最少顯示三行,最多顯示五行
2.3. ContextMenuItem/ContextMenu
添加右鍵小菜單,添加一些小功能。
[ContextMenuItem("Random", "RandomNumber")]
[ContextMenuItem("Reset", "ResetNumber")]
public int number;
void RandomNumber()
{
number = Random.Range(0, 100);
}
void ResetNumber()
{
number = 0;
}
還有一個ContextMenu
的特性,用法類似。
public string Name;
[ContextMenu("Reset Name")]
private void ResetName()
{
Name = "";
}
2.4. ColorUsage
設置顏色選擇器。
public Color color1;
[ColorUsage(false)]
public Color color2; // 沒有alpha
[ColorUsage(true, true, 0, 8, 0.125f, 3)]
public Color color3; // HDR