UnityEditor<三>自定义窗口 案例2
来源:互联网 发布:ubuntu镜像文件下载 编辑:程序博客网 时间:2024/06/05 08:53
本文参自:
克森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(); } #endregion GUILayout.Space(5); #region 绘制显示脚本内容功能 //当点击 Show Script 按钮时 if (GUILayout.Button("Show Script")) { //执行 ShowScript 函数 ShowScript(); } #endregion GUILayout.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); #endregion GUILayout.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.写入文件 // 创建StreamWriter StreamWriter 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.写入文件 // 创建StreamWriter StreamWriter 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
0 0
- UnityEditor<三>自定义窗口 案例2
- UnityEditor<三>自定义窗口 案例1
- 自定义资源(.asset)配置数据[UnityEditor案例]
- UnityEditor 反射事件2
- Unityeditor 事件(2)
- 案例一、自定义弹出小窗口
- Unity3d UnityEditor EditorWindow 自定义窗体控件
- 自定义控件---系统控件组合式(案例三)
- Android自定义控件系列案例【三】
- Qt学习笔记(三) 自定义窗口部件
- 快速弹出窗口(三):自定义dialog实现广告弹窗
- Unity Editor 基础篇(三):自定义窗口
- Unity Editor 基础篇(三):自定义窗口
- 自定义窗口
- 自定义窗口
- UnityEditor 热键
- 初涉UnityEditor
- UnityEditor(1)
- 《Linux内核分析》MOOC课程第五次实验作业
- C语言——数组名、取数组首地址的区别(一)
- 第二次作业HUFF_ENC与huff_dec的编码调试
- Java关键字final、static使用总结
- PyCharm 2016.2.1 注册码[亲测可用]
- UnityEditor<三>自定义窗口 案例2
- poj 3984
- 递推递归练习 P
- HDU2033 人见人爱A+B
- Android O 开发者预览版新特性
- scrapy爬虫(以东方烟草网为例)
- 归并
- 采药 动态规划
- 跨站的艺术-XSS Fuzzing 的技巧