[Unity]Unity3D編輯器插件擴展和組件擴展

1. 插件擴展

1.1. 命名空間

using UnityEditor;
using UnityEngine;    //非必需,經常使用到

1.2. 使用語法

[MenuItem("Assets/My Test")]
private static void Test()
{
    Debug.Log("Hello World!")
}

語法說明html

[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" 的實例。dom

[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等函數。ui

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

能夠將數值的展現效果變成滑動條效果。3d

[Range(1, 12)]
public int month;


2.2. Multiline/TextArea

控制佔用多行顯示。code

[Multiline(5)]
public string msg1;

[TextArea(3,5)]
public string msg2;     // 最少顯示三行,最多顯示五行


2.3. ContextMenuItem/ContextMenu

添加右鍵小菜單,添加一些小功能。orm

[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
相關文章
相關標籤/搜索