Unity 3D編輯器擴充套件介紹、教程(一) —— 建立選單項
Chinar堅持將簡單的生活方式,帶給世人! (擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例) |
一
Brief Introduction —— 簡介
我們在做工程的時候,需要對資料進行操作。
為節省時間,會使用一些快捷鍵,選單欄上的功能、或是右鍵選單
這些便捷的功能,都是Unity官方為了方便我們對所需資料進行操作。
對Unity編輯進行了一些封裝處理,簡化資料操作流程,封裝為一個按鈕/一個視窗/視窗功能。
這些諸如此類的功能就是編輯器的擴充套件,和封裝
功能鍵、Inspector面板、Game視窗等等都是編輯器的功能
注意:編輯器類指令碼,必須放在 Assets/Editor 資源目錄中
此資料夾下的指令碼只對編輯器進行操作。最後資源打包,Editor資料夾下的所有資源都不會被打包到工程中
如果沒有此資料夾,需自行建立:在Project視窗下,右鍵Create - - Folder
二
Create MenuItem —— 建立選單項
主要使用:靜態方法
MenuItem (itemName : string, isValidateFunction : bool, priority : int)
1
- - Create Level 1 Menu —— 建立一級選單
在選單欄上建立一個選單項,並建立一個一級選單按鈕
注意:編輯器類指令碼,必須放在 Assets/Editor 資源目錄中
此資料夾下的指令碼只對編輯器進行操作。最後資源打包,Editor資料夾下的所有資源都不會被打包到工程中
如果沒有此資料夾,需自行建立:在Project視窗下,右鍵Create - - Folder
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 建立一個指令碼工具類
/// </summary>
public class Tools//指令碼無需繼承自MonoBehaviour
{
/// <summary>
/// 建立新的選單項
/// </summary>
/// //在選單欄中建立一個 我的工具 選單專案,並生成一個 “一級選項” 的按鈕:需要對應一個靜態方法(名字最好保持一致,不一致也可),方法體自由定義
[MenuItem("我的工具/一級選項")] //選單項(“選單欄名稱/子類名稱”)—— 經過測試可為中文
static void 一級選項() //必須設定成靜態方法 —— 經過測試,亦可為中文
{
Debug.Log(111);
}
}
會有生成一個 一級選項 的按鈕,點選後列印“111”
2
- - Create Level 2 Menu —— 建立二級選單
在選單欄上建立一個選單項,並建立一個二級選單按鈕
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 建立一個指令碼工具類
/// </summary>
public class Tools//指令碼無需繼承自MonoBehaviour
{
/// <summary>
/// 建立二級選單項
/// </summary>
/// //在選單欄中建立一個 我的工具 選單專案,並生成一個 “二級選項” 的按鈕:需要對應一個靜態方法(名字最好保持一致,不一致也可),方法體自由定義
[MenuItem("我的工具/一級選項/二級選項")] //選單項(“選單欄名稱/子類名稱”)—— 經過測試可為中文
static void 二級選項() //必須設定成靜態方法 —— 經過測試,亦可為中文
{
Debug.Log(222);
}
}
會有生成一個 二級選項 的按鈕,點選後列印“222”
3
- - Create Level 2 Menu in System Menu —— 在系統選單中建立二級選單
在系統選單 Edit 中建立二級選單
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 建立一個指令碼工具類
/// </summary>
public class Tools//指令碼無需繼承自MonoBehaviour
{
/// <summary>
/// 在系統預設的選單項中,建立子按鈕
/// </summary>
/// //在系統預設選單項 Edit 中建立按鈕:(名字最好保持一致,不一致也可)
[MenuItem("Edit/一級選項/二級選項2")]
static void 二級選項2()
{
Debug.Log(333);
}
}
Edit 中最下方,會有生成一個 二級選項2 的按鈕,點選後列印“333”
4
- - Menu grouping —— 選單分組
完成選單的分組,例如系統中的多個選單項分組管理
靜態方法 MenuItem (itemName : string, isValidateFunction : bool, priority : int)
MenuItem (表示選單項:就是路徑名 , 驗證函式 : 同名的按鈕在選單函式呼叫之前呼叫 , 優先順序:用來管理選單項的層級關係)
注意: Priority 優先順序如果設定為:-1 ,那麼必然是在第一個
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 建立一個指令碼工具類
/// </summary>
public class Tools//指令碼無需繼承自MonoBehaviour
{
/// <summary>
/// 選單分組 —— 層級10
/// </summary>
/// //每個選單欄的 priority 屬性:優先順序預設為1000。相差 11 可以分為另一個組。也就是大於10就另建一組
[MenuItem("按鈕/功能1", false, 10)]
static void 功能1()
{
Debug.Log("功能1");
}
/// <summary>
/// 選單分組 —— 層級:如果不填,系統預設為1000,所以排序在最後
/// </summary>
[MenuItem("按鈕/功能2")]
static void 功能2()
{
Debug.Log("功能2");
}
/// <summary>
/// 選單分組 —— 層級:21
/// </summary>
/// //與按鈕1的層級10,相差11,故而分到了另一組中
[MenuItem("按鈕/功能3", false, 21)]
static void 功能3()
{
Debug.Log("功能3");
}
}
選單欄會有生成一個 功能 的選單項,其中有:功能1/3/2。點選後分別列印“1/3/2”
5
- - Menu display and hide. —— 選單的顯示和隱藏
完成選單的顯示和隱藏,有些時候選單項是灰色,不可用狀態/可用狀態
靜態方法 MenuItem (itemName : string, isValidateFunction : bool, priority : int)
驗證函式 isValidateFunction 值為 true 時,此驗證函式下的函式方法,會在選單函式之前呼叫
滿足條件,則按鈕顯示/否則隱藏
注意: Hierarchy 面板中,右鍵選單是 選單欄裡 GameObject 的選單項。
所以在 GameObject 選單欄中建立一個按鈕,並且優先順序設定到第一組中,即可在 Hierarchy 的右鍵選單中顯示 該按鈕
注意: Priority 優先順序如果設定為:-1 ,那麼必然是在第一個
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 建立一個指令碼工具類
/// </summary>
public class Tools//指令碼無需繼承自MonoBehaviour
{
/// <summary>
/// 驗證“刪除物體”按鈕的 顯示/隱藏
/// </summary>
[MenuItem("GameObject/刪除物體", true, -1)]
static bool 刪除物體Alternative()
{
if (Selection.objects.Length > 0)//如果選擇了物體
{
return true;//就返回真:按鈕可用
}
else//否則
{
return false;//返回假:按鈕不可用
}
}
/// <summary>
/// 在系統預設的選單項 GameObject 中,建立 刪除物體 按鈕,優先順序第一個
/// </summary>
[MenuItem("GameObject/刪除物體", false, -1)]
static void 刪除物體()
{
//Selection.objects 返回值是一個 Object陣列,就是選中的所有物體
foreach (var o in Selection.objects) //遍歷選中的所有物體
{
//GameObject.DestroyImmediate(o);//直接刪除,但是無法撤銷
Undo.DestroyObjectImmediate(o); //直接刪除,但是可以撤銷(用Ctrl+z)//Immediate:直接的,立即的
}
}
}
選單欄 GameObject 會有生成一個 刪除物體 的選單項
如果選了物體,按鈕可用
否則不可用
6
- - Shortcuts —— 快捷鍵
完成對選單專案的快捷鍵設定
靜態方法 MenuItem (itemName : string)
引數 itemName 為字串,表示選單項。+ 空格 + _O)就表示快捷鍵設為 O 鍵,不區分大小寫
引數 itemName 為字串,表示選單項。+ 空格 + %l)就表示組合鍵設為 Ctrl+L 鍵,不區分大小寫
注意:名字和快捷鍵中間必須要有空格
組合鍵: % : Ctrl
組合鍵: # : Shift
組合鍵: & : Altl
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 建立一個指令碼工具類
/// </summary>
public class Tools//指令碼無需繼承自MonoBehaviour
{
/// <summary>
/// 快捷鍵測試
/// </summary>
[MenuItem("我的工具/快捷鍵測試 _o")]//_o 是指定快捷鍵 O ,並不區分大小寫 (名字和快捷鍵中間必須要有空格)
static void 選中物體個數()
{
Debug.Log("快捷鍵"+Selection.objects.Length);//列印選中物體的個數
}
/// <summary>
/// 在系統預設的選單項中,建立子按鈕
/// </summary>
/// % : Ctrl
/// # : Shift
/// & : Alt
[MenuItem("我的工具/組合鍵測試 %l")] //%l 是指定組合鍵:Ctrl+L,並不區分大小寫 (名字和快捷鍵中間必須要有空格)
static void 快捷鍵測試()
{
Debug.Log("組合鍵"+ Selection.activeGameObject.name); //列印物體名/—— 預設列印第一個選中的物體,無論選中了幾個
}
}
點選鍵盤按鈕 O ,即可列印 “選擇物體的個數”
點選鍵盤按鈕 Ctrl + L ,即可列印 “所選物體的名字”:
如果選擇多個,預設列印第一個(根據自己程式碼來判定,如有需要可自己寫)
三
Create MenuItem for the Component —— 建立元件上的選單項
主要使用:靜態方法
MenuCommand : Context —— 選單命令的目標物件
1
- - Script Component —— 在指令碼元件上新增選單項
靜態方法 MenuItem (itemName : string)
引數 itemName 為字串,表示選單項。
引數 “CONTEXT/ PlayerHealth” 為 元件 路徑
若想對某個(元件/指令碼)進行操作,必須寫上 “CONTEXT/ (元件/指令碼)名
Undo.RecordObject (物件,鍵) 此函式用於記錄物件之後的資料變化,沒有則不能回退操作
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 玩家指令碼上的工具 —— 測試指令碼
/// </summary>
public class PlayerTools
{
/// <summary>
/// 給玩家指令碼元件上新增按鈕:初始化人物
/// </summary>
/// //[選單項函式(“環境(元件:想要給元件上加必須要用這個來表示路徑)/所需控制組件(指令碼名)/需要執行的方法名(就是按鈕名)”)]
[MenuItem("CONTEXT/PlayerHealth/初始化人物")]
static void 初始化人物(MenuCommand command) //MenuCommand 正在操作的元件物件類
{
CompleteProject.PlayerHealth player = (CompleteProject.PlayerHealth) command.context; //宣告一個PlayerHealt物件 th —— 需要強轉為 PlayerHealth型別
Undo.RecordObject(player, "PlayerTools_player"); //記錄物件 player 之後的資料變化,用於回退 —— 記錄物件(物件,鍵);//鍵的名字隨意,不能重複//如果沒有這句話,是不能退會之前的修改的
player.startingHealth = 100; //血量初始化到100
}
}
右鍵點選元件 ,選擇 初始化人物 : 即可完成對血量的初始化 —— Ctrl+z,回退操作
2
- - Syetem Component —— 在系統元件上新增選單項
靜態方法 MenuItem (itemName : string)
引數 itemName 為字串,表示選單項。
引數 “CONTEXT/ Rigidbody” 為 元件 路徑
若想對某個(元件/指令碼)進行操作,必須寫上 “CONTEXT/ (元件/指令碼)名
Undo.RecordObject (物件,鍵) 此函式用於記錄物件之後的資料變化,沒有則不能回退操作
using UnityEditor; //引用Unity編輯器名稱空間
using UnityEngine; //引用Unity引擎名稱空間
/// <summary>
/// 玩家指令碼上的工具 —— 測試指令碼
/// </summary>
public class PlayerTools
{
/// <summary>
/// 給系統元件 Rigidbody 上新增按鈕:取消重力
/// </summary>
/// <param name="command"></param>
[MenuItem("CONTEXT/Rigidbody/取消重力")]
static void 取消重力(MenuCommand command)
{
Rigidbody rig = (Rigidbody) command.context; //context是一個 (正操作/滑鼠下) 的元件:返回值為Object —— 強轉為需要的型別
Undo.RecordObject(rig, "PlayerTools_rig"); //記錄 rig 之後的資料變化,用於回退 —— 記錄物件(物件,鍵);//鍵的名字隨意,不能重複//沒有這句話,是不能回退,因為系統沒記錄
rig.mass = 0; //質量為0
rig.useGravity = false; //關閉重力
}
}
右鍵點選剛體元件 ,選擇 取消重力: 即可完成對重力的取消 —— Ctrl+z,完成回退
3
- - ContextMenu —— 元件選單的用法
ContextMenu 與 ContextMenuItem 均繼承自: MonoBehaviour
所以可以直接在 自義定指令碼中使用,也就是工程指令碼中直接用
[ContextMenuItem(按鈕名,方法名)] 需要寫在所需控制變數之上
[ContextMenu(按鈕名)] 需要直接寫在方法上
Undo.RecordObject (物件,鍵) 此函式用於記錄物件之後的資料變化,沒有則不能回退操作
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
/// <summary>
/// 玩家健康屬性指令碼
/// </summary>
public class PlayerHealth : MonoBehaviour
{
[ContextMenuItem("增加血量50", "增加血量")] //按鈕名,方法//需要寫在所需控制變數之上
public int startingHealth = 100; // 初始血量
/// <summary>
/// 直接在指令碼中設定選單項,即可在 面板中右鍵顯示 該按鈕
/// </summary>
[ContextMenu("設定屬性")]//可以直接在指令碼方法裡寫,需要直接寫在方法上
void 設定屬性()
{
Debug.Log("設定屬性");
}
/// <summary>
/// 為變數 startingHealth 提供方法,每點選一次加 50
/// </summary>
void 增加血量()
{
Undo.RecordObject(this, "PlayerHealth_startingHealth");//記錄值的改變,用於回退//(物件,鍵)
startingHealth += 50;
}
}
右鍵點選 PlayerHealth 指令碼元件 ,即可看到按鈕“設定屬性”
點選 PlayerHealth 指令碼元件 ,選擇 startingHealth 屬性,右鍵即可看到按鈕“增加血量50”
本部落格為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究
對於需要複製、轉載、連結和傳播部落格文章或內容的,請及時和本博主進行聯絡,留言,Email: [email protected]
對於經本博主明確授權和許可使用文章及內容的,使用時請註明文章或內容出處並註明網址
相關推薦
Unity 3D編輯器擴充套件介紹、教程(一) —— 建立選單項
Unity編輯器擴充套件教程 本文提供全流程,中文翻譯。Chinar堅持將簡單的生活方式,帶給世人!(擁有更好的閱讀體驗 —— 高解析度使用者請根據需求調整網頁縮放比例)
WindowsService教程(一)建立呼叫
WindowsService,比較淺顯的理解就是放於後臺跑的應用程式,像我們PC,其實都跑著很多後臺程式,我們可能都不知道,因此我認為這是對於一些經常性重複性處理,用它非常合適,比如從資料庫不斷寫資料,寫個應用放於桌面上跑,一不小心還可能被關掉,安全性美觀性都會大大降低。
史上最詳細的Vmware安裝教程(一)-建立Linux虛擬機器
本文將演示如何使用Vwmare workstation軟體建立Linux虛擬機器,通過學習,我們將可以按照自己下需求,來建立一個安裝Linux作業系統(Centos)的虛擬機器,虛擬機器的CPU、硬碟、網絡卡、記憶體等硬體都可以根據需要進行定製。 1. 準備Host機器(
Lucene 6.2.1入門教程(一) 建立索引和基本搜尋索引
簡單說兩句,Lucene現在高版本的教程很少,網上基本是4.0以下的,目前最新版是6.2.1,所以我試著來寫寫這個版本的教程。 至於那些概念什麼的,我就不多說了,大家可以參考以前的舊教程來了解Lucene的體系結構和基本原理。大致說一下Lucene就是通過建立索引這
Unity Editor 編輯器擴充套件 十一 Inspector可排序列表
目錄 可排序列表簡單使用 建立如下指令碼並掛載到物體上: using UnityEngine; using System.Collections; public class Example1 : MonoBehaviour { [
Unity Editor 編輯器擴充套件三 Unity Editor 資料持久化及Editor視窗的初識
目錄 Unity Editor 資料持久化及Editor視窗的初識 學習一下編輯器資料永久儲存,和PlayerPrefs基本上是一樣的,順便熟悉下新建視窗,裡面控制元件類似OnGUI。
Unity Editor 編輯器擴充套件 十三 自定義建立資源
目錄 初級資源建立 Editor資料夾下建立指令碼: using UnityEngine; using UnityEditor; public class CreateTest { [MenuItem ("Assets/Create
react教程(一)JSX語法、組件概念、生命周期介紹
app .org react教程 sna 輸入 卸載 war fun 獲取 JSX React中,推出了一種新的語法取名為JSX,它給了JS中寫HTML標簽的能力,不需要加引號。JSX的語法看起來是一種模板,然而它在編譯以後,會轉成JS語法,只是書寫過程中的語法糖。 JSX
Unity編輯器:消空控制檯(Console)
1 static MethodInfo clearMethod = null; 2 /// <summary> 3 /// 清空log資訊 4 /// </summary> 5 private static void ClearConso
Nginx實用教程(一):啟動、停止、重載配置
style 負載 繼續 local con doc lin 配置文件的修改 tex Nginx是一個功能強大的web服務器和負載均衡軟件,由俄羅斯人開發。Nginx包括一個master進程和數個worker進程,master進程用於讀取、解析配置文件和管理worker進程,
WPF入門教程系列六——布局介紹與Canvas(一)
mouse 建議 geo 自動調整 範圍 添加 ges ans colors 從這篇文章開始是對WPF中的界面如何布局做一個較簡單的介紹,大家都知道:UI是做好一個軟件很重要的因素,如果沒有一個漂亮的UI,功能做的再好也無法吸引很多用戶使用,而且沒有漂亮的界面,那麽普通用
關於Unity視頻播放器插件 AVPro Video(一)平面UI視頻播放
omv image 電腦配置 trigger alt -m sys avi provide 1.官網下載該插件或者我分享的鏈接: 鏈接:https://pan.baidu.com/s/1boGeJ8r 密碼:mvbf 2.新建項目導入資源,添加以下遊戲物體與UI到場景中
Spring Cloud Stream教程(一)介紹Spring Cloud Stream
連接 測試 channel source 發布 構建 自動 ces oot Spring Cloud Stream是構建消息驅動的微服務應用程序的框架。Spring Cloud Stream基於Spring Boot建立獨立的生產級Spring應用程序,並使用Spring
Windows 活動目錄(AD)服務器系統升級到2012之環境介紹及準備(一)
AD 升級 activedirectory DHCP 1. AD服務器相關配置信息1 2 1.1 系統版本角色名稱操作系統版本語言數量ADWindows server 2003 sp2CN2ADWindows server 2012 R2CN21.2 主機名和IP地址服務器主機名IP地
Docker入門教程(一)介紹
操作 AC font start 一個 namespace com 下載地址 div 1.1docker是什麽: Docker是通過內核虛擬化技術(namespaces及cgroups cpu、內存、磁盤io等)來提供容器的資源隔離與安全保障等。由於Docker通過操作系統
文本編輯器vim--LInix系統隨筆(五)
編輯器 esc 定義 註釋 使用 set 工作模式 linix 模式 ①Vim常用操作 www.vim.org 1、vim工作模式 進入 vi filename 退出 輸入:wq 編輯模式命令(:後面輸入):set
ARKit For Unity windows開發教程(一)
windows開發 安裝步驟 html vmware 黑蘋果 ios1 。。 土豪 war 現在常常看見網上有一些ARKit教程,本人也是新人小白一枚,如果寫錯了,請見諒指正。。。。QQ:362057738 閑話不多說,如果你想了解ARkit框架,自行度娘去就行,網
Unity學習(一)建立物體+編輯指令碼
平臺:Mac OS X 10 Unity 2018 2.14f1 Personal 官網下載個人試用版,配VS for Mac 1.建立一個立方體: GameObjective -> 3D Objective -> Cube 點選scene中的立方體拖動到合適位置 2
聯盛德WIFI模組 山景語音Codec 智慧音箱開發板、智慧語音玩具開發板 上手教程(一)
新板子除錯步驟 接線如圖: 連線JLINK,開啟板子, 開啟keil工程:e:\work\智慧硬體\軟硬體\聯盛德-wifi模組\音訊AP8048c\MVs18_01_07\Examples\SpiFlash\SpiFlashExample.uvproj 之後點
pyspider 爬蟲教程(一):HTML 和 CSS 選擇器
雖然以前寫過 如何抓取WEB頁面 和 如何從 WEB 頁面中提取資訊。但是感覺還是需要一篇 step by step 的教程,不然沒有一個總體的認識。不過,沒想到這個教程居然會變成一篇譯文,在這個爬蟲教程系列文章中,會以實際的例子,由淺入深討論爬取(抓取和解析)的一些關鍵