日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity编辑器拓展整理(主要是siki的视频教程)

發(fā)布時間:2024/1/18 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity编辑器拓展整理(主要是siki的视频教程) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

編輯器拓展

https://blog.csdn.net/zxl321365712/article/details/80080586

蠻牛上一個詳細的博客

http://www.manew.com/thread-90330-1-1.html

siki關于編輯器拓展的視頻教程(免費)

http://www.sikiedu.com/my/course/47

官方教程

https://unity3d.com/cn/learn/tutorials/topics/interface-essentials/unity-editor-extensions-menu-items

API界面

https://docs.unity3d.com/ScriptReference/MenuItem.html

編輯器腳本都在Editor下,在打包時不會包含

編輯器特性位于unityEditor命名空間下

?

添加菜單按鈕

[MenuItem("Tools/test")]//在菜單上顯示命令public static void Test()//點擊該命令后可以執(zhí)行這個方法,私有也可訪問{Debug.Log("Test Function is work");}

public MenuItem(string itemName, bool isValidateFunction, int priority);

  • itemName路徑:每個/代表一級菜單

  • isValidateFunction是否為可用性檢查,在后面介紹。

  • priority優(yōu)先級,越小越靠上,當優(yōu)先級相差大于10以上時會分組

    • 路徑重復時,后添加的菜單會覆蓋先添加的。

    • 系統(tǒng)內置的功能也會被覆蓋。

    • Game Object中,優(yōu)先級小于50(不包括)的會顯示在hierarchy中。

    • component菜單下的內容必須繼承monobehaviour,因此需要使用AddComponentMenu添加,其他使用方法相似

    允許加空格,空格后可設置快捷鍵,不可重復,如"Tools/test4 _q"

    特殊快捷鍵如下:

    * _ – 無

    * % – CTRL on Windows / CMD on OSX

    * # – Shift

    * & – Alt

    * LEFT/RIGHT/UP/DOWN – Arrow keys

    * F1…F12 – F keys

    * HOME, END, PGUP, PGDN

    給腳本,組件添加右鍵菜單:

    路徑用CONTEXT/[組件名]/[其他]

    ?

    獲取點擊的組件:方法添加MenuCommand類參數(shù),其中context字段即為我們右鍵打開菜單的那個物體(或者組件)。建議存成對應類型再使用,可以用強制轉換,或者as。用as轉換,失敗時會返回空,而強制會報錯。

    static public void RigidbodyTools(MenuCommand cmd){Rigidbody rigidbody = cmd.context as Rigidbody;}

    selection類

    這個是unity用來獲取當前選中的物體的。可以得到用戶當前選中的物體。常用內容:

    • activeObject//當前選中的那個物體

    • Objects//所有選中的物體,返回一個數(shù)組

    • activeGameObject//當前選中的物體(一個,多個時為第一個)(包括預制體,不可改變物體)

    • gameObjects//所有選中的物體,返回一個數(shù)組,(包括預制體,不可改變物體)

    • activeTransform//當前選中的物體的transform

    • transforms//選中的物體中最高層級

    ?

    添加可撤銷操作:

    編輯器腳本中大多數(shù)操作不會注冊到棧中,不能使用

    使用Undo,操作的同時會加入棧中,使用ctrl+z可撤銷。

    ? ? [MenuItem("Tools/myDelete")]

    ? ?static void myDelete()

    ? ?{

    ? ? ? ?foreach(Object o in Selection.gameObjects)

    ? ? ? ?{

    ? ? ? ? ? ?//Object.DestroyImmediate(o);

    ? ? ? ? ? ?Undo.DestroyObjectImmediate(o);

    ? ? ? ?}

    ? ?}

    (編輯器腳本只能使用DestroyImmediate)

    相關操作:

    • DestroyObjectImmediate//可撤銷的刪除物體

    • RecordObject//記錄之后物體的改變

    • RegisterCreatedObjectUndo//記錄物體創(chuàng)建

    ?

    控制菜單的可用性

    添加一個路徑同名的MenuItem,第二個參數(shù)isValidateFunction設為true,并設置一個bool型的方法。

    當顯示菜單時會檢查這個方法,當返回false時不可用,true時可用。

    建議方法后加validate(驗證)作為驗證方法。

    當在hierarchy中添加菜單時,可用性都為真,但是返回假時不會執(zhí)行方法。(是bug吧)

    ?

    在組件上直接添加菜單選項

    可以使用ContextMenu可以在通常的組件中添加菜單選項。

    不需要在Editor中,不用引用UnityEditor,方法為非靜態(tài)。

    [ContextMenu("Renew")]

    ? ?void Renew()

    ? ?{

    ? ? ? ?Debug.Log("Renew work");

    ? ?}

    ?

    給字段添加菜單

    在字段前加[ContextMenuItem(string name, string function)]標簽

    第一個參數(shù)為菜單名,第二個是調用的方法。這個方法必須聲明(可為私有)。

    [ContextMenuItem("add value", "AddValue")]

    public ?int value=0;

    void AddValue()

    {

    ? ? value += 10;

    }

    ?

    創(chuàng)建向導面板

    首先創(chuàng)建一個面板類,在Editor文件夾下

    該類繼承ScriptableWizard

    使用ScriptableWizard.DisplayWizard<T>(title);創(chuàng)建面板

    • T:面板類的類型

    • title:面板的標題

    • 一般將創(chuàng)建面板也放在面板類下方便查找,同時由于面板類繼承ScriptableWizard,創(chuàng)建不用ScriptableWizard.DisplayWizard,直接DisplayWizard即可。

    面板類的公有方法會顯示在面板上,就像組件中一樣。

    using UnityEditor;

    public class ValueChangeWizard : ScriptableWizard {

    ? ?[MenuItem("Tools/ChangeValue", false, 40)]

    ? ?static void OpenChangeValue(MenuCommand cmd)

    ? ?{

    ? ? ? ?DisplayWizard<ValueChangeWizard>("Change Value");

    ? ?}

    ? ?//創(chuàng)建面板

    ? ?public int newValue = 1000;//公有方法會像組件中一樣顯示

    ? ?private int score=0;//私有方法不會顯示

    }

    ps:Wizard是巫師的意思

    面板類都有一個按鈕creat,使用DisplayWizard的第二個參數(shù)改變顯示名。

    有一些默認的方法,自動在按下時調用:

    ? ?private void OnWizardCreate()

    ? ?{

    ? ?}//點擊創(chuàng)建按鈕調用,調用后默認關閉窗口

    ? ?private void OnWizardOtherButton()

    ? ?{

    ? ?}//點擊其他按鈕調用

    ? ?private void OnWizardUpdate()

    ? ?{

    ? ?}//打開或向導的值改變時調用

    ?? private void OnSelectionChange()

    ? ?{

    ? ?}//每當選中物體發(fā)生更改時調用

    //類似的消息方法還有一些,可以在API中查到。

    ?

    面板類的提示信息

    isValid//按鈕是否可用

    errorString//錯誤信息

    helpString//幫助信息

    createButtonName//creat按鈕顯示內容

    otherButtonName//ortherButton顯示內容

    ?

    顯示通知

    (EditorWindow.)ShowNotification(GUIContent notification);

    參數(shù)為一個GUIContent對象,

    GUIContent(string text, Texture image, string tooltip);

    可以設置文字text,圖片image,tooltip

    ShowNotification(new GUIContent("ShowNotification", new Texture2D(200,200), "tooltip"));

    ?

    tooltip,可以作為標簽加到字段前,用于設置懸浮時顯示的提示信息。

    [Tooltip("新的值")]

    ????public int ChangeValue = 10;

    沒搞懂怎么在消息提示中使用。

    ?

    編輯器數(shù)據(jù)保存

    EditorPrefs

    使用方法與PlayerPrefs相同,不在重復

    ?

    一些零碎的實用功能

    EditorUtility中集成了一些實用的方法,主要是提示,信息框等。

    EditorUtility.DisplayProgressBar(string title, string info, float progress);

    參數(shù):

  • title 標題

  • info 信息

  • progress 0到1之間的一個值,表示進度。

  • 每當進行一定步驟后,調用這個方法實現(xiàn)進度條。

    以下是一個每次點擊增加一點進度條的實現(xiàn)。

    ????int count = 0;

    ????private void OnWizardOtherButton()

    ????{

    ????????EditorUtility.DisplayProgressBar("title", "info", count/10.0f);

    ????????count++;

    ????????if (count > 10)

    ????????{

    ????????????EditorUtility.ClearProgressBar();

    ????????????count = 0;

    ????????}

    ????}

    ?

    創(chuàng)建窗口

    使用EditorWindow,與 ScriptableWizard相似,創(chuàng)建時有些許不同。

    可以使用OnGUI顯示一些內容。

    using UnityEditor;

    using UnityEngine;

    public class MyWindow : EditorWindow

    {

    ????[MenuItem("Tools/MyWindow")]

    ????static void ShowMyWindow()

    ????{

    ????????MyWindow window = EditorWindow.GetWindow<MyWindow>();

    ????????window.Show();

    ????}

    ????//打開這個窗口的命令

    ????private string name;

    ????private void OnGUI()

    ????{

    ????????GUILayout.Label("string");//顯示一個字符串

    ????????name = GUILayout.TextField(name);//顯示一個輸入框

    ????}

    }

    ?

    特殊目錄位置

    下面是一些默認的排序優(yōu)先級

    ?

    總結

    以上是生活随笔為你收集整理的unity编辑器拓展整理(主要是siki的视频教程)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。