前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >零基础入门 35:自定义窗口

零基础入门 35:自定义窗口

作者头像
韩东吉
发布2018-10-19 17:01:01
1.3K1
发布2018-10-19 17:01:01
举报

Hello,各位小伙伴,最近公司的事务繁多,所以稍微搁置了一下更新的速度,导致很多同学都以为我被恐怖分子绑架了

-_-||||(手动一脸黑线),真是尴尬。

今天给大家带来一篇之前铺垫的分享,在零基础入门的第七篇,我介绍了一下如何创建自定义的菜单,效果如下

包括菜单的一些响应事件

今天的分享是通过自定义菜单,创建自定义窗口。如果对之前自定义菜单有所遗忘的同学,可以翻看之前的内容,找到零基础入门第七篇即可。超链如下。

零基础入门 7: 创建自己的菜单

进入正题


先来给大家看下自定义窗口都可能会有什么样式

我们打开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里面还有很多,需要大家根据自己的需求去实现即可。

好啦,今天的自定义窗口就到这里啦,我们下期分享见哈。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 韩东吉的Unity杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档