Unity3d學習筆記PreViewGUI


以前寫編輯器的時候一直有個想法,把模型動作預覽在編輯器中實現,能夠實時的查看模型形狀,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

有時間會進行修改和整合入編輯器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM