Unity編輯器拓展

2021-09-10 14:25:20 字數 3674 閱讀 6216

有時候為了加快效率,不得不做一些方便的小工具,尤其是有那種改變體屬性,調整ui布局,或者調整字型,有選擇性的新增修改元件的時候,如果乙個兩個手動該沒問題,如果物件數量很多,而且只是做一些簡單的更改的時候,那還是推薦大家先做乙個工具,還能練練手。

時候會比如我們需要用鉸鏈把一串transform連起來,或者把一些物件整齊排列,也可以先做乙個工具。

如果需要乙個窗體來輸入設定資訊的話,官方文件給出了大體的結構

using unityengine;

using unityeditor;

using system.collections;

class

mywindow

:editorwindow

void ongui (

)}

我們也可是設定快捷鍵,比如下面的shift+alt+ctrl+c

//#shift &alt %ctrl

[menuitem

("mytools/setpos #%&c"

)]

然後,我們再ongui函式中,新增文字輸入框,按鈕等物件

這條語句可以把選中的gameobjcet賦值給targetobject變數

targetobject = selection.activegameobject;

//獲得選中物件

然後,再button的單擊事件中

if

(gui.

button

(new

rect

(125

,200,60

,30),

"重新排列"))

}"!!!");

}

用乙個遞迴來獲取所有符合條件的子物件,比如我的條件是,tag為box,而且有transform元件,當然沒有也可以通過**新增。

static

void

getchild

(transform tragetobject)

if(child.childcount >0)

}}

這個工具目前的功能是快速排列transform,當然,也完全可以做一些稍微複雜點的操作,根據情況更改**即可

完整**如下:

using unityeditor;

using unityengine;

using system.collections;

using system.collections.generic;

public

class

colorvalue

:editorwindow

static

string

xyzvalue =

newstring[6

];static

vector3 xyzstep=vector3.one;

static

vector3 startpos = vector3.zero;

static

gameobject targetobject;

static list childobject =

newlist

<

transform

>()

;static

void

getchild

(transform tragetobject)

if(child.childcount >0)

}}private

void

ongui()

}"!!!");

} gui.

label

(new

rect(62

,2,60

,20),

"x")

; gui.

label

(new

rect

(122,2

,60,20

),"y")

; gui.

label

(new

rect

(184,2

,60,20

),"z")

; gui.

label

(new

rect(2

,20,60

,20),

"startpos");

xyzvalue[0]

= gui.

textfield

(new

rect(62

,20,60

,20),xyzvalue[0]

);xyzvalue[1]

= gui.

textfield

(new

rect

(122,20

,60,20

), xyzvalue[1]

);xyzvalue[2]

= gui.

textfield

(new

rect

(184,20

,60,20

), xyzvalue[2]

);gui.

label

(new

rect(62

,39,60

,20),

"x")

; gui.

label

(new

rect

(122,39

,60,20

),"y")

; gui.

label

(new

rect

(184,39

,60,20

),"z")

; gui.

label

(new

rect(2

,59,60

,20),

"step");

xyzvalue[3]

= gui.

textfield

(new

rect(62

,59,60

,20), xyzvalue[3]

);xyzvalue[4]

= gui.

textfield

(new

rect

(122,59

,60,20

), xyzvalue[4]

);xyzvalue[5]

= gui.

textfield

(new

rect

(184,59

,60,20

), xyzvalue[5]

);}private

void

oninspectorupdate()

}

Unity編輯器拓展

該資料夾可以放在專案的任何資料夾下,可以有多個 editor 資料夾。編輯器擴充套件相關的指令碼都要放在該資料夾內,該資料夾中的指令碼只會對unity編輯器起作用。專案打包的時候,不會被打包到專案中。如果編輯器相關指令碼不放在該資料夾中,打包專案可能會出錯。如果非要有些編輯器相關指令碼不放在該資料夾...

Unity 自定義編輯器視窗 拓展編輯器功能

最近學習了unity自定義編輯器視窗,下面簡單總結,方便用到時回顧。新建乙個指令碼 using unityengine using system.collections using unityeditor 自定義的編輯器視窗 public class mywindow editorwindow vo...

認識Unity編輯器

儲存整個專案所有資源的載體。專案中無論是從外部匯入的包 package 資源 後面有詳細 講解 模型資源,音訊資源,還是自己建立的各種指令碼 材質等,都需要在本檢視中儲存 編輯與展現出來。scene 場景檢視 視覺化展現與編輯當前場景中所有的遊戲物件。本檢視與上面層級檢視的區別是 場景檢視是視覺化遊...