轉(zhuǎn)載:http://mp.weixin.qq.com/s/-zvUnISuugjaLwW2i0G3Ig
Unity最強(qiáng)大的地方之一是它擴(kuò)展性非常強(qiáng)的編輯器。Unite Europe 2016上有一個視頻專門講編輯器編程的:這里大概記錄一下里面的關(guān)鍵點。
場景一
關(guān)注點:
1、繪制重要區(qū)域,Gizmos.DrawXXX
2、OnDrawGizmos和OnDrawGizmosSelected回調(diào)函數(shù)
3、點擊Gizmos按鈕就可以在Game視圖也看到線框了
場景二
關(guān)注點:
組織面板上的參數(shù),添加滑動條、Header、空白等
注意到上面面板的最小面有個Camera Height,調(diào)節(jié)它可以改變攝像機(jī)的高度。這個改變是可以發(fā)生在編輯器模式下的,而且也不需要腳本添加ExecuteInEditor。這是通過實現(xiàn)自定義的Editor腳本來實現(xiàn)的:
場景三
關(guān)注點:
1、自定義繪制List對象
2、使用serializedObject來修改參數(shù)的話Unity會自動有各種幫助函數(shù),例如自動添加Undo功能
3、如果直接修改參數(shù)的話,需要使用EditorUtility.SetDirty來告訴Unity需要保存數(shù)據(jù)
4、BeginChangeCheck()和EndChangeCheck()會檢測它們之間的GUI有沒有被修改,如果修改了的話可以據(jù)此修改參數(shù)
5、Undo.RecordObject可以為下一步修改添加Undo/Redo
6、EditorUtility.DisplayDialog可以打開內(nèi)置對話框
[圖片上傳中。。。(6)]
1、首先在面板上隱藏默認(rèn)的List繪制方法,使用HideInInspector隱藏屬性:
2、為了讓PistonState可以顯示在面板上,需要序列化PistonState:
3、實現(xiàn)自定義的繪制方程:
DrawDefaultInspector:先繪制默認(rèn)的,DrawStatesInspector:自定義繪制面板函數(shù)。
4、DrawState函數(shù):
場景四
關(guān)注點:
實現(xiàn)了一個可以在編輯器狀態(tài)下預(yù)覽效果的編輯器窗口
為了在編輯器狀態(tài)下可以查看到cube的運動,我們還需要實現(xiàn)OnDrawGizmos來繪制一些線框表示運動。原理就是使用PreviewTime.Time來控制運動。
場景五
關(guān)注點:
在Scene視圖中,鼠標(biāo)的位置繪制特定的Handle
場景六
關(guān)注點:
在Scene視圖繪制自定義的工具條
場景七
關(guān)注點:
1、可以在場景六的基礎(chǔ)上,點擊相應(yīng)按鈕后增加或刪除Cube
2、新的編輯器腳本邏輯和場景七類似,重點在于回調(diào)函數(shù)OnSceneGUI:
[圖片上傳中。。。(17)]
場景八
關(guān)注點:
使用Scriptable Object把一些Prefab預(yù)覽在Scene視圖上
Scriptable Object是一個相當(dāng)于自定義Assets對象的類。下面是LevelBlocks的定義。它包含了一個LevelBlockData的數(shù)組來存儲可選的Prefab對象。
我們之后就可以在Hierency視圖創(chuàng)建一個LevelBlock資源,Editor類則會加載這個資源來得到相應(yīng)的數(shù)據(jù)。
6G%5JU`U$}3{$XK@}I9S%Q8.png