Unity Editor 基础篇(三):自定义窗口
终极目标
利用学到的东西制作自己的工具(自定义的窗口、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 对象
设置窗口的名字
绘制窗口
绘制窗口元素需要在 OnGUI() 函数里面设计,接下来我们一一分解。
步骤:
1.GUILayout.Space(10),这个有说过,让两个元素之间空十个像素之间的距离
2.GUI.skin.label.fontSize 、GUI.skin.label.alignment 用于设置标题的字体大小和对齐格式;
显示当前正在编辑的场景
1.第一个参数用于设置卡槽的标题名字
2.第二个参数用于设置字段显示的物体
3.第三个参数用于设置显示的类型
4.第四个参数用于设置是否允许指定场景中的物件
最终效果
Unity Editor 基础篇(三):自定义窗口相关推荐
- Unity Editor 基础篇(四):Handles
本文参自: 克森http://mp.weixin.qq.com/s/qxsKDPjJS30S9OXeQ8WKTw 本文为本人学习上链接的笔记微有改动,请点击以上链接查看原文,尊重楼主知识产权. Uni ...
- Unity编辑器Unity Editor基础(一)
Unity编辑器Unity Editor基础(一) 关于 Unity 内置属性可以从到官方文档中查询,本篇文章只介绍一些常用的内置属性,如下图所示: 接下来进行项目设置,创 ...
- 圆形界面 开启相机_「基础篇三」手机摄影拍照界面详解
[基础篇三]手机摄影拍照界面详解 手机拍照对我们来说已习以为常,每天我们都会用手机相机功能或多或少的拍出几张照片.故手机拍照界面对我们来说也不陌生,但手机拍照界面上的那些按钮,那些功能你都用过吗?你 ...
- WF4.0 基础篇 (三十 完) 对学习WF的一点建议
从09年10月份 NET4.0 Bata 2发布后,我就开始写[WF4.0 基础篇]这个系列,经历了5个多月终于在NET4.0正式发布前将这个系列完成了 这段时间与一些对WF4.0感兴趣的公司与开发人 ...
- python 01列表异或_python基础篇三
python基础篇二所介绍的列表是基本的数据类型之一,元组.集合.字典也是基本的数据类型之一.熟练运用这些基本的数据类型很重要,就像是一座高楼大厦,把地基打扎实了,这栋高楼大厦才能在狂风暴雨中岿然不动 ...
- Python机器学习基础篇三《无监督学习与预处理》
前言 前期回顾: Python机器学习基础篇二<为什么用Python进行机器学习> 上面这篇里面写了文本和序列相关. 我们要讨论的第二种机器学习算法是无监督学习算法.无监督学习包括没有已知 ...
- JAVA学习之路--基础篇三
目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...
- 自定义View时,用到Paint Canvas的一些温故,讲讲用路径绘画实现动画效果(基础篇 三)
转载请注明出处王亟亟的大牛之路 上礼拜上了一篇关于动画的自定义View的文章,然后里面的实现是PathMeasure,然后这一部分貌似以前没有讲过,那么就再补一篇来介绍下这部分的知识(之前一篇的传送门 ...
- 【Spring 基础篇三】属性注入与属性编辑器
上篇我们了解了一下applicationContext.xml的两种注入方式,本篇我们来了解一下关于属性的注入以及操作. 在敲代码的过程中,我们很容易遇到这样的问题,比如一个Lis ...
- 自动化测试基础篇--Selenium多窗口、句柄问题
有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开一个新标签页面,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需 ...
最新文章
- Python之初识函数(Day11)
- Java UDP协议传输
- linux tcp项目,Linux上TCP重传的应用控制
- Redis主从复制、哨兵模式和分布式集群
- sf | 读取和保存空间矢量数据
- 电商网站主动取消客户已支付成功订单感想
- Eclipse版本控制插件Subclipse与Subversive的区别与选择
- 如何用Java的Robot完成模拟鼠标移动和键盘输入(可应用刷网课)
- 安卓手机实现wifi中继、WiFi信号增强
- 十大热门编程语言:不死 Java、不朽 C/C ++、新贵 Python
- Xpath根据text内容快速定位
- MapReduce名词解释
- 0021:孩子也是要将心比心的
- CIE 国际照明委员会
- Windows找回磁盘被病毒感染后隐藏的文件
- TiDB在摩拜单车在线数据业务的应用和实践
- 点线面的意义_点线面在绘画中的意义
- 50本关于软件测试的书籍
- IP地址的划分-------IP地址的借位情况
- 协同过滤算法(基于用户)
热门文章
- python打砖块游戏算法设计分析_基于pygame的打砖块游戏,做到一半,不带做了
- c语言转义字符o用法,gogo体育下载官网-gogo体育下载官网
- 用python做了个桌球瞄准器
- 全球及中国飞行时间传感器芯片行业研究及十四五规划分析报告
- 【IE知识】最系统、完整的标准工时学习资料;标准作业(SOP)详解;生产线布局规划
- gis与一般计算机应用系统有哪些异同,gis概论各章练习题..doc
- 聊聊故事点背后的故事
- Flickr网站架构分析
- linux c 获取usb vid,Linux如何使用libudev获取USB设备VID及PID
- 电脑怎样重装系统win7旗舰版