1. 程式人生 > >拓展Unity3D編輯器

拓展Unity3D編輯器

/***
 * 
 * 編輯器建立新視窗,並設定窗口布局
 * 
 * 
 * 
 * 
 * 
 */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class EditorWindowTest : EditorWindow {

    [MenuItem("MyMenu/OpenWindow")]
    static void OpenWindow()
    {
        Rect wr = new Rect(0, 0, 500, 500);                          //建立視窗

        EditorWindowTest window = (EditorWindowTest)EditorWindow.GetWindowWithRect(typeof(EditorWindowTest), wr, true, "測試建立視窗");
        window.Show();
    }

    private string text;                                             //輸入文字的內容
    private Texture texture;                                         //選擇貼圖的物件

    public void Awake()
    {
        texture = Resources.Load("timg (3)") as Texture;                    //在資源中讀取一張貼圖
    }

    //繪製視窗時呼叫
    void OnGUI()
    {
        text = EditorGUILayout.TextField("輸入文字:", text);        //輸入框控制元件

        if (GUILayout.Button("開啟通知", GUILayout.Width(200)))
        { 
            //開啟一個通知欄
            this.ShowNotification(new GUIContent("我是菜菜"));
        }

        if (GUILayout.Button("關閉通知", GUILayout.Width(200)))
        {
            //關閉通知欄
            this.RemoveNotification();
        }

        //文字框顯示滑鼠在視窗的位置
        EditorGUILayout.LabelField("滑鼠在視窗的位置", Event.current.mousePosition.ToString());

        //選擇貼圖
        texture = EditorGUILayout.ObjectField("新增貼圖", texture, typeof(Texture), true) as Texture;

        if (GUILayout.Button("關閉視窗", GUILayout.Width(200)))
        {
            this.Close();
        }
    }

    void Update()
    { 
    
    }

    void OnFocus()
    {
        Debug.Log("當視窗獲得焦點是呼叫一次");
    }

    void OnLostFocus()
    {
        Debug.Log("當視窗丟失焦點時呼叫一次");
    }

    void OnHierarchyChange()
    {
        Debug.Log("當Hierarchy檢視中的任何物件發生改變時呼叫一次");
    }

    void OnProjectChange()
    {
        Debug.Log("當Project檢視中的資源發生改變時呼叫一次");
    }

    void OnInspectorUpdate()
    {
        this.Repaint();
    }

    void OnSelectionChange()
    {
        //當視窗處於開啟狀態,並且在Hierarchy檢視中選擇某遊戲物件時呼叫
        foreach (Transform t in Selection.transforms)
        {
            //有可能是多選,這裡開啟一個迴圈列印選中游戲物件的名稱
            Debug.Log("OnSelectionChange" + t.name);
        }
    }

    void OnDestroy()
    {
        Debug.Log("當視窗關閉時呼叫");
    }
}