gui 界面开发s2.51cto.com/wyfs02/m01/26/ec/wkiom1nu8d2sfjyfabg0bb0l-na… ·...

29
GUI 界面开发 讲师:刘国柱

Upload: others

Post on 26-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 界面开发

讲师:刘国柱

Page 2: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

2

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 3: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI概述

游戏界面是游戏作品中不可或缺的部分,它可以为游戏提供导航,也可以为游戏内容提供重要的信息,同时也是美化游戏的一个重要手段。

在Unity3D 中通过两种方式来实现GUI.

第一种是使用GUI对象直接在场景中添加GUI控件,再使用脚本程序实现GUI功能。

第二种方式则全部通过编写程序来实现GUI.

Page 4: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI概述

Page 5: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI概述

无论摄像机拍到的图像时怎么变的,GUI永远是显示在屏幕上,不受

变形、碰撞、光照的影响

Page 6: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

6

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 7: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

使用GUI对象创建

GUI Text 对象

GUI Texture 对象

Page 8: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

8

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 9: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 基本控件

方法OnGUI():GUI部分是每“帧”擦除重绘的,只应该在OnGUI中绘制GUI

典型基本控件

标签:void GUILayout. Label(string)

文本输入域:string GUILayout.TextField(string);

多行文本框: msgBody = GUILayout.TextArea(msgBody);

密码框:string GUILayout.PasswordField(pwd,„*‟),第二个参数为掩码字符。

按钮:Button只有鼠标抬起才会返回true,这样用Button做发射子弹就不能按下一直发射,可以使用RepeatButton,这样按下期间会一直返回true

Page 10: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 基本控件

典型基本控件(续)

Tab页: selectedToolBarId =

GUILayout.Toolbar(selectedToolBarId,new string[]{“装备”,“经验”,“队友”}); 返回值为点击的按钮的序号

复选框:isMuted = GUILayout.Toggle(isMuted,“静音”);

多行文本框: msgBody = GUILayout.TextArea(msgBody);

Page 11: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 基本控件

【课堂练习】

GUI 基本控件的编写

Label、TextField、TextArea、PassworldField、button,RepeatButton。

Page 12: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

12

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 13: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUILayout 布局与OnGUI 易错点

GUILayout布局默认会伸展控件的尺寸。Button等控件支持params

GUILayoutOption[] options可变参数数组,可以通过GUILayout.Width(100)返回一个设置控件宽度的GUILayoutOption

对象, Height()、 MinWidth()、MinHeight()等同理。例子:

GUILayout.Button("Test",GUILayout.Width(500),GUILayout.Height(

30))

GUILayout采用线性布局,类似于StackPanel,默认是纵向布局。通过GUILayout.BeginHorizontal();开启和GUILayout.EndHorizontal()结束一个横向排列区域,同理BeginVertical() 、EndVertical()

如果嫌控件太挤,可以使用GUILayout.Space(30);增加若干像素的间隙

Page 14: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUILayout 布局与OnGUI 易错点

难点:帧,动画就是由一帧一帧的画面组成的

示例:画个文本框,在里面输入内容不显示?为什么?怎么办?

解答:这是因为帧造成的

原因:内容确实被输入了,但是之后进入了下一帧的播放,而在新的一帧中,并没有输入

关键是能够让内容随时间持久化存在

解决:只要让文本框中显示的值与返回的值,使用同一个变量即可

Page 15: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUILayout 布局与OnGUI 易错点

使用 Debug.Log 打印输出常用方法的输出频率。

Start() 、Update()、 FixedUpdate() 、OnGUI();

Page 16: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUILayout 布局与OnGUI 易错点

响应按钮点击:GUI中没有事件概念,鼠标点击了按钮Button返回值就是true,例如:

if(GUILayout.Button("Test"))

{

Camera.mainCamera.transform.Translate(Vector3.back);

}

思考下面的代码有什么问题,怎么解决:

if(GUILayout.Button("Test"))

{

GUILayout.Label("Clicked Test");

}

Page 17: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

17

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 18: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 常用控件与贴图

区域Area:相当于控件盒子, Area中的控件跟着Area移动,

BeginArea()开始一个区域,参数指定区域的大小和坐标, EndArea()

结束区域;区域是没有边框和标题的,也不可以拖放

滑动条:纵向, value = GUILayout.VerticalSlider(value,min,max);

返回值为当前值,HorizontalSlider()横向

窗口Window:GUILayout.Window(0, new

Rect(50,50,200,200),AddWindow1,“我的窗口”); 第一个参数为窗口的编号,第二个为窗口大小,第三个为void WindowFunction(int

windowId)委托,用来绘制窗口内容,第四个参数为窗口标题,返回当前所在区域

窗口拖拽,在WindowFunction的最后调用GUI.DragWindow()可以启用全屏拖放,给DragWindow传Rect参数可以设定可拖放的区域

Page 19: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 常用控件与贴图

【课堂演示】

点击“显示装备”(Button)显示”装备窗口”,点击窗口中的【关闭】按钮则关闭.

提示:设置一个私有字段,作为是否显示窗口的判断依据

难点: 深入理解“帧”的概念。

Page 20: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 常用控件与贴图

无论是3D的游戏对象还是GUI,好看的效果都是贴图上去的。给Cube贴图:Project中新建Material,选择颜色或者图片,然后把Material拖到Cube上

给GUI贴图:给脚本增加一个Texture2D类型的public字段,GUI.DrawTexture(new Rect(100,100,100,100),MyTexture2D);把Texture2D画到界面上指定区域;直接把图片从Project拖到脚本的MyTexture2D属性上即可

通过代码动态加载贴图:通过代码加载的贴图等资源需要放到Assets的Resources(固定的)目录下,然后Texture2D txt2D =

(Texture2D)Resources.Load(“meinv”);加载。注意“meinv”这个名字是在Project中的显示的名称,不用带后缀,这个名字和物理文件名可以不一样,可以改名

Page 21: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUI 常用控件与贴图

做项目是推荐定义public Texture2D的做法,这样可以方便美工修改贴图,便于分工。

【课堂演示: 贴图】

Page 22: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

22

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 23: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

GUISkin 皮肤

首先在Project中Create→GUI Skin,选中创建的GUISkin文件,在Inspector中修改每种控件的样式

编写一个脚本,脚本中定义一个GUISkin类型的属性:

public GUISkin MySkin;

OnGUI中加载样式:

GUI.skin = MySkin;

GUILayout.Button(“确定");

GUILayout.Button(“取消");

选中脚本所拖的的模型,把GUISkin文件拖到MySkin属性上。这样所有按钮都是这样的风格GUI.Skin.GetStyle(“”)

注意:如果没有效果,就把脚本remove后再添加

Page 24: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

24

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 25: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

控件字体

控件的默认字体不好看,如果想定制字体的话,需要把字体文件嵌入到项目中,这样可以避免程序放到没有指定字体的系统上无法运行,支持ttf格式的字体。

到windows下的C:\Windows\Fonts找到合适的字体文件拖到Assets中。

创建一个GUISkin文件,然后设定控件的字体为Assets中的字体文件。

脚本中加载GUISkin即可。

提醒:GUI用来做对话框等,不要使用GUI来做游戏画面,因为效率低,而且无法使用物理引擎。用U3D做愤怒小鸟其实就是固定摄像机的3D游戏

Page 26: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

控件字体

[课堂练习: GUISkin、字体]

Page 27: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

27

目录

使用GUI对象创建

GUI概述

GUI 基本控件

GUILayout 布局与OnGUI 易错点

GUI 常用控件与贴图

GUISkin 皮肤

控件字体

课堂作业: GUI 游戏界面初步设计

Page 28: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

课堂作业: GUI 游戏界面初步设计

【课堂作业】

要求: 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI

界面。

结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音

量”等按钮点击事件的后台业务逻辑实现功能。

提示: 对于调节音量需要使用到PlayerPrefs 类进行持久化数据保存。

Page 29: GUI 界面开发s2.51cto.com/wyfs02/M01/26/EC/wKiom1Nu8D2SfjYfABG0BB0L-NA… · 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI 界面。 结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音