Hello,各位小伙伴,最近公司的事务繁多,所以稍微搁置了一下更新的速度,导致很多同学都以为我被恐怖分子绑架了
-_-||||(手动一脸黑线),真是尴尬。
今天给大家带来一篇之前铺垫的分享,在零基础入门的第七篇,我介绍了一下如何创建自定义的菜单,效果如下
包括菜单的一些响应事件
今天的分享是通过自定义菜单,创建自定义窗口。如果对之前自定义菜单有所遗忘的同学,可以翻看之前的内容,找到零基础入门第七篇即可。超链如下。
进入正题
先来给大家看下自定义窗口都可能会有什么样式
我们打开Unity,看到的About Unity的窗口也属于自定义窗口,包括一些文本图标ScrollView的信息展示
文字按钮的功能窗口
以上都属于创建自定义窗口,并且上面这些图也在之前的帖子里都有发过,今天给大家补上这篇分享,如何创建自定义窗口。
首先,我们创建一个新的项目,创建脚本,并且放到Editor目录下。然后双击打开脚本准备编辑,这里我更换了新的IDE,不再使用mono,转为VS。
创建好了以后,我们加入引用的Using以及创建一个自定义菜单
创建好了菜单以后,效果图如下
现在点击菜单会弹出我们打印的一句日志,以上在之前都有介绍,这里不再细说,然后就是通过点击菜单弹出一个Window出来了,这里我们不再创建其他脚本,而是直接把我们创建的脚本不继承MonoBehaviour而是继承EditorWindow。
然后我们增加一个弹出的接口。并且创建一个菜单出来。
此时我们点击菜单,就可以弹出这个窗口出来了。
此时的代码如下,我先贴出来
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
public class JiminCreateWindow : EditorWindow
{
#region Public Attributes
#endregion
#region Private Attributes
private static JiminCreateWindow window;
#endregion
#region Public Methods
[MenuItem("Jimin/CustomWindow")]
static void PopUpWindow()
{
Popup();
}
static void Popup()
{
Rect rc = new Rect(0, 0, 555, 555);
window = (JiminCreateWindow)EditorWindow.GetWindowWithRect(typeof(JiminCreateWindow), rc, true, "Jimin测试创建自定义窗口");
}
#endregion
#region Override Methods
#endregion
#region Private Methods
#endregion
#region Inner
#endregion
}
以上就是实现出现自定义菜单并且弹出窗口的代码。
接下来,我们要为窗口增加一些元素啦。
我们增加一个OnGUI函数用来刷新我们的窗口,并且增加一些逻辑进来。
现在我们重新看下点开的窗口样式吧,我大概简单的加了一些label展示,按钮,以及一个ScrollView的展示区域
动态展示图如下
只要每次点击按钮,就会弹出一条通知来,这只是功能展示而已。我在每次点击按钮以后改变了文本的内容,并且输出当前的时间秒数,让大家看出区别。并且一旦长度达到可滚动区域,ScrollView可以滚动显示该文本区域。
代码如下
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System;
using System.IO;
public class JiminCreateWindow : EditorWindow
{
#region Public Attributes
#endregion
#region Private Attributes
private static JiminCreateWindow window;
private float floatValue;
private Vector2 scrollPos;
private string t = "";
private GameObject[] selectObjs;
#endregion
#region Public Methods
[MenuItem("Jimin/CustomWindow")]
static void PopUpWindow()
{
Popup();
}
static void Popup()
{
Rect rc = new Rect(0, 0, 555, 555);
window = (JiminCreateWindow)EditorWindow.GetWindowWithRect(typeof(JiminCreateWindow), rc, true, "Jimin测试创建自定义窗口");
}
void OnGUI()
{
GUILayout.Space(10);
GUILayout.Label("该功能用来展示如何在窗口里创建一个纯文本label", EditorStyles.boldLabel);
GUILayout.Space(10);
floatValue = EditorGUILayout.Slider("展示窗口创建Slider", floatValue, -10, 10);
GUILayout.Space(5);
GUILayout.Label("下面展示如何在窗口里创建ScrollView", EditorStyles.boldLabel);
GUILayout.Space(10);
EditorGUILayout.BeginHorizontal();
scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(530), GUILayout.Height(380));
GUILayout.Label(t);
EditorGUILayout.EndScrollView();
EditorGUILayout.EndHorizontal();
if (GUI.Button(new Rect(160, 500, 230, 40), "点击确定按钮,增加显示文本"))
{
t += "\n" + "\n" + "这里增加一行新的文本显示,当前系统时间:" + DateTime.Now.Second;
this.ShowNotification(new GUIContent("使用这行代码,可以弹出一个通知窗口"));
}
}
#endregion
#region Override Methods
#endregion
#region Private Methods
#endregion
#region Inner
#endregion
}
以上就是实现该自定义窗口所使用代码。
关于自定义窗口的内容,我不可能全篇给大家全都列出所有的样式,但是我下面给大家分享个网址,里面有很多关于Unity Window的一些相关属性,可以帮助大家更有效的绘制窗口。
https://docs.unity3d.com/ScriptReference/EditorGUILayout.html
这个网址是Unity的官方API
里面有一些关于自定义窗口会用到的表现效果,如下
类似功能和效果API里面还有很多,需要大家根据自己的需求去实现即可。
好啦,今天的自定义窗口就到这里啦,我们下期分享见哈。