以前寫編輯器的時候一直有個想法,把模型動作預覽在編輯器中實現,能夠實時的查看模型形狀,shader效果,動作幀數等。
類似實現的效果即unity的Preview效果,如下圖:
然而但是想實現的時候,找了半天並沒有找到在編輯器中實現的方法。
幸好最新在群里吹比的時候,看到有人遇到了同樣的問題,並且確實找到了實現的方法:
Unity所提供的Editor.OnPreviewGUI接口,官方有詳細的文檔
效果圖如下:
具體代碼如下:
using UnityEngine; using UnityEditor; public class GameObjectEditorWindow: EditorWindow { GameObject gameObject; Editor gameObjectEditor; [MenuItem("Window/GameObject Editor")] static void ShowWindow() { GetWindow<GameObjectEditorWindow>("GameObject Editor"); } void OnGUI() { gameObject = (GameObject) EditorGUILayout.ObjectField(gameObject, typeof(GameObject), true); if (gameObject != null) { if (gameObjectEditor == null) gameObjectEditor = Editor.CreateEditor(gameObject); gameObjectEditor.OnPreviewGUI(GUILayoutUtility.GetRect(500, 500), EditorStyles.whiteLabel); } } }
乍看之下已經實現我們基本的需求了,但實際我們只能拖拽旋轉觀察,無法根據模型的狀態更新區更新在編輯器中模型的效果。
而且並沒有我們所能調試的參數,例如:preview窗口的攝像機的位置,自然光的方向,強度,模型的動作shader等。
只能初步展示當前的GameObject狀態,距離我們的期望目標還差一定的距離,所以有了下一種實現方式。
Unity所提供的第二個接口,PreviewRenderUtility.DrawMesh()
這是一個比較全面的展示接口,具體的介紹和demo看這里
在此基礎上,我寫了一個測試demo。
有時間會進行修改和整合入編輯器。