GUI 界面开发
讲师:刘国柱
2
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: GUI 游戏界面初步设计
GUI概述
游戏界面是游戏作品中不可或缺的部分,它可以为游戏提供导航,也可以为游戏内容提供重要的信息,同时也是美化游戏的一个重要手段。
在Unity3D 中通过两种方式来实现GUI.
第一种是使用GUI对象直接在场景中添加GUI控件,再使用脚本程序实现GUI功能。
第二种方式则全部通过编写程序来实现GUI.
GUI概述
GUI概述
无论摄像机拍到的图像时怎么变的,GUI永远是显示在屏幕上,不受
变形、碰撞、光照的影响
6
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: GUI 游戏界面初步设计
使用GUI对象创建
GUI Text 对象
GUI Texture 对象
8
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: 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
GUI 基本控件
典型基本控件(续)
Tab页: selectedToolBarId =
GUILayout.Toolbar(selectedToolBarId,new string[]{“装备”,“经验”,“队友”}); 返回值为点击的按钮的序号
复选框:isMuted = GUILayout.Toggle(isMuted,“静音”);
多行文本框: msgBody = GUILayout.TextArea(msgBody);
GUI 基本控件
【课堂练习】
GUI 基本控件的编写
Label、TextField、TextArea、PassworldField、button,RepeatButton。
12
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: 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);增加若干像素的间隙
GUILayout 布局与OnGUI 易错点
难点:帧,动画就是由一帧一帧的画面组成的
示例:画个文本框,在里面输入内容不显示?为什么?怎么办?
解答:这是因为帧造成的
原因:内容确实被输入了,但是之后进入了下一帧的播放,而在新的一帧中,并没有输入
关键是能够让内容随时间持久化存在
解决:只要让文本框中显示的值与返回的值,使用同一个变量即可
GUILayout 布局与OnGUI 易错点
使用 Debug.Log 打印输出常用方法的输出频率。
Start() 、Update()、 FixedUpdate() 、OnGUI();
GUILayout 布局与OnGUI 易错点
响应按钮点击:GUI中没有事件概念,鼠标点击了按钮Button返回值就是true,例如:
if(GUILayout.Button("Test"))
{
Camera.mainCamera.transform.Translate(Vector3.back);
}
思考下面的代码有什么问题,怎么解决:
if(GUILayout.Button("Test"))
{
GUILayout.Label("Clicked Test");
}
17
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: 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参数可以设定可拖放的区域
GUI 常用控件与贴图
【课堂演示】
点击“显示装备”(Button)显示”装备窗口”,点击窗口中的【关闭】按钮则关闭.
提示:设置一个私有字段,作为是否显示窗口的判断依据
难点: 深入理解“帧”的概念。
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中的显示的名称,不用带后缀,这个名字和物理文件名可以不一样,可以改名
GUI 常用控件与贴图
做项目是推荐定义public Texture2D的做法,这样可以方便美工修改贴图,便于分工。
【课堂演示: 贴图】
22
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: 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后再添加
24
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: GUI 游戏界面初步设计
控件字体
控件的默认字体不好看,如果想定制字体的话,需要把字体文件嵌入到项目中,这样可以避免程序放到没有指定字体的系统上无法运行,支持ttf格式的字体。
到windows下的C:\Windows\Fonts找到合适的字体文件拖到Assets中。
创建一个GUISkin文件,然后设定控件的字体为Assets中的字体文件。
脚本中加载GUISkin即可。
提醒:GUI用来做对话框等,不要使用GUI来做游戏画面,因为效率低,而且无法使用物理引擎。用U3D做愤怒小鸟其实就是固定摄像机的3D游戏
控件字体
[课堂练习: GUISkin、字体]
27
目录
使用GUI对象创建
GUI概述
GUI 基本控件
GUILayout 布局与OnGUI 易错点
GUI 常用控件与贴图
GUISkin 皮肤
控件字体
课堂作业: GUI 游戏界面初步设计
课堂作业: GUI 游戏界面初步设计
【课堂作业】
要求: 按照“大圣跑酷”游戏的开发界面效果图,使用给定资源开发GUI
界面。
结合前面学习的脚本知识点,完成“开始”、“退出”、“调节音
量”等按钮点击事件的后台业务逻辑实现功能。
提示: 对于调节音量需要使用到PlayerPrefs 类进行持久化数据保存。