UnityEditor三自定义窗口 案例2
生活随笔
收集整理的這篇文章主要介紹了
UnityEditor三自定义窗口 案例2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文參自:?
克森https://mp.weixin.qq.com/s/4TEfD3W6RJZZbtBnC4pUQQ
本文為本人學習上鏈接的筆記微有改動,請點擊以上鏈接查看原文,尊重樓主知識產權。
---------------------------------------------------------------------------------------------------------
本文難點:
GUILayout.ExpandHeight(true) 使用液態高度: 相當于動態高度,用掉所有剩下的空間 GUILayoutUtility.GetRect() 方法會在剩下的區域返回指定寬高的矩陣 GUI.DrawTexture(Rect position, 0, GUILayout.ExpandHeight(true)),Texture image);畫貼圖
功能:
預覽一個腳本,轉為一個文本放到指定文件夾,反過來也有。
最終效果:
代碼:
using UnityEngine; using System.Collections; using System.IO; using UnityEditor;public class MyWindow : EditorWindow {/// <summary>/// 窗口的正確打開方式/// </summary>[MenuItem("Tool/My Window")]public static void ShowWindow(){EditorWindow.GetWindow(typeof(MyWindow), false, "My Tool");}void OnGUI(){Debug.Log(position);//整個窗口為水平布局GUILayout.BeginHorizontal();DrawLeft();DrawRight();GUILayout.EndHorizontal();}private string scriptsContext = "";private Vector2 scrollposition;/// <summary>/// 繪制左邊區域/// </summary>void DrawLeft(){//局部窗口為垂直布局GUILayout.BeginVertical(GUILayout.Width(position.width / 2));//空出5個像素GUILayout.Space(5);//繪制標簽GUILayout.Label("Preview");//開始滑塊區域scrollposition = GUILayout.BeginScrollView(scrollposition);//繪制文本區域scriptsContext = GUILayout.TextArea(scriptsContext, GUILayout.ExpandHeight(true));//液態高度(占滿高度)//結束滑塊區域GUILayout.EndScrollView();GUILayout.EndVertical();}//文件資源對象private TextAsset textAssetObje;//腳本資源對象private TextAsset scriptAssetObje;//文件保存的路徑private string saveFilePath = "";//腳本保存的路徑private string saveScritpPath = "";//繪制2D圖片對象private Texture2D image;/// <summary>/// 繪制右邊區域/// </summary>void DrawRight(){//局部窗口為垂直布局GUILayout.BeginVertical();GUILayout.Space(5);#region 腳本轉換為文本功能// 繪制對象字段(類型為TextAsset)textAssetObje = (TextAsset)EditorGUILayout.ObjectField("Script Object",textAssetObje, typeof(TextAsset), false);//繪制Text字段,用戶獲取用戶指定的路徑saveFilePath = EditorGUILayout.TextField("Save In", saveFilePath);GUILayout.Space(5);//當我們點擊這個按鈕時if (GUILayout.Button("Save File")){//執行這個方法SaveFile();}#endregionGUILayout.Space(5);#region 繪制顯示腳本內容功能//當點擊 Show Script 按鈕時if (GUILayout.Button("Show Script")){//執行 ShowScript 函數ShowScript();}#endregionGUILayout.Space(10);#region 文本轉換為腳本功能scriptAssetObje = (TextAsset)EditorGUILayout.ObjectField("Text Object",scriptAssetObje, typeof(TextAsset), false);saveScritpPath = EditorGUILayout.TextField("Save In", saveScritpPath);GUILayout.Space(5);//當我們點擊這個按鈕時if (GUILayout.Button("Create Script")){//執行這個方法CreateScript();}#endregion#region 繪制圖片//通過Resources.load() 加載指定的圖片if (image == null){image = Resources.Load<Texture2D>("image");}//GUILayoutUtility.GetRect()方法會在剩下的區域返回指定寬高的矩陣GUI.DrawTexture(GUILayoutUtility.GetRect((position.width / 2), 0, GUILayout.ExpandHeight(true)), image);#endregionGUILayout.EndVertical();}//默認文件保存路徑private const string defaultFilePath = "Assets/LitionUtility/TextAssets/";//默認腳本保存路徑private const string defaultScriptPath = "Assets/LitionUtility/ScriptAssets/";/// <summary>/// 腳本轉換文本/// </summary>void SaveFile(){//1.保存到默認路徑if (saveFilePath.Equals("")){//保存到默認路徑 //如果文件夾不存在if (!Directory.Exists(defaultFilePath)){//則創建文件夾Directory.CreateDirectory(defaultFilePath);}//1.寫入文件// 創建StreamWriterStreamWriter sw = new StreamWriter(defaultFilePath + textAssetObje.name + ".txt");//寫入文件sw.Write(textAssetObje.text);//關閉流sw.Close();}else{//保存到用戶指定的路徑//判斷文件夾是否存在if (!Directory.Exists("Assets/" + saveFilePath)){//不存在,則創建一個新的Directory.CreateDirectory("Assets/" + saveFilePath);}//同上StreamWriter sw = new StreamWriter("Assets/" + saveFilePath + "/" + textAssetObje.name + ".txt");sw.Write(textAssetObje.text);sw.Close();}//刷新資源AssetDatabase.Refresh();}void CreateScript(){//1.保存到默認路徑if (saveScritpPath.Equals("")){//保存到默認路徑 //如果文件夾不存在if (!Directory.Exists(defaultScriptPath)){//則創建文件夾Directory.CreateDirectory(defaultScriptPath);}//1.寫入文件// 創建StreamWriterStreamWriter sw = new StreamWriter(defaultScriptPath + scriptAssetObje.name + ".cs");//寫入文件sw.Write(scriptAssetObje.text);//關閉流sw.Close();}else{//保存到用戶指定的路徑//判斷文件夾是否存在if (!Directory.Exists("Assets/" + saveScritpPath)){//不存在,則創建一個新的Directory.CreateDirectory("Assets/" + saveScritpPath);}//同上StreamWriter sw = new StreamWriter("Assets/" + saveScritpPath + "/" + scriptAssetObje.name + ".txt");sw.Write(scriptAssetObje.text);sw.Close();}//刷新資源AssetDatabase.Refresh();//2.用戶指定的路徑}/// <summary>/// 將腳本的內容顯示到左邊的文本區域中/// </summary>void ShowScript(){//textAssetObje.text 將腳本的內容轉換成字符串//scriptsContext 用于顯示左邊文本區域對應的變量scriptsContext = textAssetObje.text;} }
文末:再次聲明請尊重樓主版權:?
克森 https://mp.weixin.qq.com/s/4TEfD3W6RJZZbtBnC4pUQQ
總結
以上是生活随笔為你收集整理的UnityEditor三自定义窗口 案例2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程复试面试问题总结(二)
- 下一篇: Android Metro风格的Laun