日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity Editor 基础篇(三):自定义窗口

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity Editor 基础篇(三):自定义窗口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
源地址:http://gad.qq.com/article/detail/32207
終極目標

利用學到的東西制作自己的工具(自定義的窗口、Inspector、菜單、插件等等)。


準備工作

在之前的項目中,找到 Editor 文件夾,然后創建一個新的 C# 腳本,命名為“MyFirstWindow”,然后雙擊打開腳本,添加如下代碼:

  • using?System.Collections;??
  • using?System.IO;??
  • using?UnityEditor;??
  • using?UnityEditor.SceneManagement;??
  • using?UnityEngine;??
  • ///???
  • ///???
  • ///???
  • public?class?MyFirstWindow?:?EditorWindow?{??
  • ????string?bugReporterName?=?"";??
  • ????string?description?=?"";??
  • ????GameObject?buggyGameobject;??
  • ????MyFirstWindow()??
  • ????{??
  • ????????this.titleContent?=?new?GUIContent("Bug?Reporter");??
  • ????}??
  • ??
  • ????[MenuItem("Tool/Bug?Reporter")]??
  • ????static?void?ShowWindow()??
  • ????{??
  • ????????EditorWindow.GetWindow(typeof(MyFirstWindow));??
  • ????}??
  • ??
  • ????void?OnGUI()??
  • ????{??
  • ????????EditorGUILayout.BeginVertical();??
  • ??
  • ????????GUILayout.Space(10);??
  • ????????GUI.skin.label.fontSize?=?24;??
  • ????????GUI.skin.label.alignment?=?TextAnchor.MiddleCenter;??
  • ????????GUILayout.Label("Bug?Reporter");??
  • ??
  • ????????GUILayout.Space(10);??
  • ????????bugReporterName?=?EditorGUILayout.TextField("Bug?Name",?bugReporterName);??
  • ??
  • ??
  • ????????GUILayout.Space(10);??
  • ????????GUI.skin.label.fontSize?=?12;??
  • ????????GUI.skin.label.alignment?=?TextAnchor.UpperLeft;??
  • ????????GUILayout.Label("Currently?Scene:" EditorSceneManager.GetActiveScene().name);??
  • ??
  • ????????GUILayout.Space(10);??
  • ????????GUILayout.Label("Time:" System.DateTime.Now);??
  • ??
  • ????????GUILayout.Space(10);??
  • ????????buggyGameobject?=?(GameObject)EditorGUILayout.ObjectField("Buggy?Gameobject",?buggyGameobject,typeof(GameObject),true);??
  • ??
  • ????????GUILayout.Space(10);??
  • ????????GUILayout.BeginHorizontal();??
  • ????????GUILayout.Label("Description",GUILayout.MaxWidth(80));??
  • ????????description?=?EditorGUILayout.TextArea(description,GUILayout.MaxHeight(50));??
  • ????????GUILayout.EndHorizontal();??
  • ??
  • ??
  • ????????EditorGUILayout.Space();??
  • ????????if(GUILayout.Button("Save?Bug"))??
  • ????????{??
  • ????????????SaveBug();??
  • ????????}??
  • ????????if(GUILayout.Button("Save?Bug?With?Screenshot"))??
  • ????????{??
  • ????????????SaveBugWithScreenshot();??
  • ????????}??
  • ??
  • ????????GUILayout.EndVertical();??
  • ????}??
  • ????void?SaveBug()??
  • ????{??
  • ????????Directory.CreateDirectory("Assets/BugRepots/" bugReporterName);??
  • ????????StreamWriter?sw?=?new?StreamWriter("Assets/BugRepots/" bugReporterName "/" ?bugReporterName ".txt");??
  • ????????sw.WriteLine(bugReporterName);??
  • ????????sw.WriteLine(System.DateTime.Now.ToString());??
  • ????????sw.WriteLine(EditorSceneManager.GetActiveScene().name);??
  • ????????sw.WriteLine(description);??
  • ????????sw.Close();??
  • ??
  • ????}??
  • ????void?SaveBugWithScreenshot()??
  • ????{??
  • ????????Directory.CreateDirectory("Assets/BugRepots/" bugReporterName);??
  • ????????StreamWriter?sw?=?new?StreamWriter("Assets/BugRepots/" bugReporterName "/" ?bugReporterName ".txt");??
  • ????????sw.WriteLine(bugReporterName);??
  • ????????sw.WriteLine(System.DateTime.Now.ToString());??
  • ????????sw.WriteLine(EditorSceneManager.GetActiveScene().name);??
  • ????????sw.WriteLine(description);??
  • ????????sw.Close();??
  • ????????Application.CaptureScreenshot("Assets?/?BugRepots?/?" bugReporterName "?/?" ?bugReporterName "ScreenShot" ".png");??
  • ????}??
  • }??

  • 代碼分析?


    屬性



    首先聲明了三個變量:


    ????1.bugReporterName 用于儲存記錄Bug人的名字

    ????2.description 用于描述Bug信息

    ????3.buggyGameObject 用于儲存 Bug 對象


    設置窗口的名字



    添加菜單欄選項 - 打開窗口({MenuItem()]下的方法必須為靜太)

    繪制窗口


    ????繪制窗口元素需要在 OnGUI() 函數里面設計,接下來我們一一分解。



    步驟:

    ????1.GUILayout.Space(10),這個有說過,讓兩個元素之間空十個像素之間的距離

    ????2.GUI.skin.label.fontSize 、GUI.skin.label.alignment 用于設置標題的字體大小和對齊格式;

    顯示當前正在編輯的場景
    EditorSceneManager.GetActiveScen().name,其實就是返回當前編輯的場景信息(也就是返回 Scene 類型參數),然后利用 name 屬性獲取場景的名字,命名空間:using UnityEditor.SceneManagement;

    繪制對象槽

    ??1.第一個參數用于設置卡槽的標題名字

    ????2.第二個參數用于設置字段顯示的物體

    ????3.第三個參數用于設置顯示的類型

    ????4.第四個參數用于設置是否允許指定場景中的物件


    繪制描述文本區域




    最終效果

    最終效果

    總結

    以上是生活随笔為你收集整理的Unity Editor 基础篇(三):自定义窗口的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。