Unity 8 5 擴充套件編輯器

2022-09-15 03:00:16 字數 2881 閱讀 3365

分類:unity、c#、vs2015

建立日期:2016-04-27

一、簡介

可以通過編輯器視窗 (editor windows) 建立自己在 unity 中的自定義設計工具。來自editorwindow (而非 monobeh**iour )的指令碼可以影響 gui/guilayout 和 editorgui/editorguilayout 控制項。或者,你可以使用自定義檢視器 (custom inspectors) 顯示遊戲物件檢視器 (gameobject inspector) 中的 gui 控制項。

二、自定義編輯器視窗

你可以在應用程式中建立任意數量的自定義視窗。這些視窗和檢視器 (inspector)、場景 (scene) 及其他內建視窗的作用相似。這非常適合用來為遊戲的子系統新增使用者介面。

1. 建立乙個來自 editorwindow 的指令碼。

2. 使用**觸發視窗自動顯示。

3. 執行工具的 gui **。

1、編輯器視窗 (editorwindow)

為製作編輯器視窗,指令碼必須儲存在乙個叫「editor」的資料夾中。在這個源自編輯器視窗 (editorwindow) 的指令碼中編寫乙個類。然後,在內部 ongui 函式中編寫 gui 控制項。

下面是j**ascript**示例(當然也可以用c#實現):

class mywindow extends editorwindow

void

ongui()

}這個示例產生如下所示的視窗:

三、自定義檢視器

提高遊戲建立速度的關鍵是為常用元件建立自定義檢視器。為了方便舉例,我們將使用乙個非常簡單的指令碼,該指令碼可以保持物件始終看著乙個點。

下面是lookatpoint.js示例:

var lookatpoint = vector3.zero;

function update () {

transform.lookat (lookatpoint);

這將保持物件朝向世界座標空間的乙個點。讓我們來讓它變得酷點!

@script executeineditmode()

var lookatpoint = vector3.zero;

function update () {

transform.lookat (lookatpoint);

嘗試將指令碼新增至您的主相機並在「場景」(scene) 檢視中將其四處拖動。

1、製作乙個自定義編輯器

這已經很好了,但是我們可以通過自定義檢視器使其更加美觀。為此,我們需要為它建立乙個editor 。

下面是在editor資料夾中建立的乙個叫做 lookatpointeditor的j**ascript檔案:

@customeditor (lookatpoint)

class lookatpointeditor extends editor {

function oninspectorgui () {

target.lookatpoint = editorguilayout.vector3field ("look at point", target.lookatpoint);

if (gui.changed)

editorutility.setdirty (target);

注意該類必須繼承自editor。其中,@customeditor 屬性報告 unity 它將作為哪個元件的編輯器。

每當 unity 顯示檢視器時,oninspectorgui 中的**都會被執行。因此,你可以在此處放任何 gui ** - 它像遊戲的 ongui() 一樣執行,但卻是在檢視器內部執行的。編輯器定義可用於訪問正被檢查的物件的目標屬性。

當使用者通過檢查 gui.changed 而更改任何值時,editorutility.setdirty **將會被執行。

在這種情況下,我們會將向量 3 (vector3) 字段之一用於變換檢視器 (transform inspector) - 如下:

還有很多任務作沒有做,但是我們先到此為止了 - 重頭戲還在後面…

2、場景檢視新增

你可以通過在自定義編輯器中執行 onscenegui() 來為場景檢視 (scene view) 新增附加**。在這種情況下,將新增第二個位置控制手柄,使使用者可以在場景檢視中拖動觀察目標點。下面是j**ascript**示例:

@customeditor (lookatpoint)

class lookatpointeditor extends editor {

function oninspectorgui () {

target.lookatpoint = editorguilayout.vector3field ("look at point", target.lookatpoint);

if (gui.changed)

editorutility.setdirty (target);

function onscenegui () {

target.lookatpoint = handles.positionhandle (target.lookatpoint, quaternion.identity);

if (gui.changed)

editorutility.setdirty (target);

onscenegui 的執行和 oninspectorgui 一樣 - 除了前者是在場景檢視中執行的之外。為便於製作編輯介面,可以使用手柄 (handles) 類中定義的函式。其中所有的函式都是為三維場景 (3d scene) 檢視設計的。 如果您想放置二維 gui 物件(gui、editorgui),需要將這些物件包含在 handles.begingui() 和 handles.endgui() 的呼叫中。

Unity編輯器擴充套件

unity引擎除了提供大部分通用的功能以外,還為開發者提供了編輯器的擴充套件開發介面,開發者可以編寫編輯器指令碼,打造適合自己的遊戲輔助工具和定製的編輯器。以前指令碼開發中使用的一些api和元件類,都屬於執行時類,unity還提供了編輯器類用於編輯器的擴充套件開發,包括編輯器環境下使用的gui類,編...

Unity擴充套件編輯器三

scene檢視是編輯遊戲模型的地方,其實它還可以進行編輯,如下圖所示,我給scene檢視做了簡單的編輯 scene檢視的擴充套件是基於物件的,意思是你必須在hierarchy檢視中選擇乙個物件才行,hierarchy檢視中選擇不同的物件可以有不同的scene檢視。圖中我麼建立了乙個立方體物件,接著給...

Unity編輯器擴充套件 視窗建立

using unityeditor 展示對話方塊中的屬性 public class playerchange scriptablewizard 建立表和屬性被修改的時候每幀被呼叫 private void onwizardupdate 當物體在選中或未選中狀態發生改變時呼叫 private void...