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