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

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

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

原文发布于微信公众号 - 韩东吉的Unity杂货铺(DeveloperJimin)

原文发表时间:2017-11-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏偏前端工程师的驿站

Asp.net页面生命周期

前言                                      本篇记录的是Asp.net页面生命周期,也就是管道模型的最末端HttpHandl...

2768
来自专栏数据结构笔记

Django搭建博客(八):进阶:form与 model配合使用

在我们的后台管理页面中需要一个表单来提交和修改博客,按照上一篇讲的,我们可以这么使用:

1513
来自专栏xingoo, 一个梦想做发明家的程序员

[收藏]IntelliJ Idea快捷键

Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化...

3056
来自专栏何俊林

Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

前言:关于《TV Metro界面(仿泰捷视频TV版)源码解析》由于都是相关代码,就不发公众号了,有兴趣的可以看链接:http://blog.csdn.net/h...

33910
来自专栏葡萄城控件技术团队

Spread for Windows Forms高级主题(4)---自定义用户交互

你可以从多方面自定义用户界面来自定义用户与Spread控件的交互方式。同时,你还可以自定义如何处理用户交互方式。 设置允许用户进行的操作 下面的列表总结了通过控...

2156
来自专栏hbbliyong

Android Studio 快捷键

Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 Ctrl+Alt+O 优化导入...

3076
来自专栏更流畅、简洁的软件开发方式

【实现】表单控件的UI布局,实现方式

 一、先说一下表单控件要实现的功能吧。      1、绘制UI,包括表格(Table)的绘制,也就是TR 、TD,TR是多少行,TD是有多少列;包括子控件的控件...

3907
来自专栏Kevin-ZhangCG

Intellij Idea 2018常用快捷键总结

快捷键列表 Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码

1.1K3
来自专栏hrscy

iOS 9 Storyboard 教程(二上)介绍Segue静态单元格(static cell)

Add Player 最终的设计看上去像下面这样:#接第一部分: 原帖地址 简书地址

2811
来自专栏IMWeb前端团队

Change Detection And Batch Update

本文作者:IMWeb 吴浩麟 原文出处:IMWeb社区 未经同意,禁止转载 前言 在传统的WEB开发中,当与用户或服务器发生交互时,需要我们手动获取数...

2487

扫码关注云+社区

领取腾讯云代金券