是有这样一个界面又怎么办呢?
这个界面一共有大约32个GUI控件,这还是可见的,加上那些不是当前页面的控件,累计已经远超100个控件了!
试想,我们如果要在一个脚本里面维护100多个控件,不管你的结构设计的是多么的精妙,也不知道要疯多少次!而且老的GUI是无法在编辑器中进行可视化的,也就是说任何一个GUI的尺寸,你都需要去一一尝试他的大小,这样的话,没人会在项目中使用自带的老GUI系统也是非常正常的事情了。
但是Unity4.6宣布了,Unity新的GUI系统,这让事情出现了转机,例如上面那个超过100个控件的GUI界面,是我在Unity5中使用新的GUI系统花了不到2个小时完成的。注意不只是布局和调节外观,还包括所有的逻辑。
GUI异军突起
Unity在4.6的时候就宣布了新的GUI系统,并且新的GUI系统是开源的,所有代码都用C#写成,这意味着如果我愿意,我可以添加修改任何我想要的GUI控件。但是在此笔者并
不会对这些源代码做任何解读,因为笔者也没有仔细看过,这里让我先来学习一下新GUI系统的基本用法吧。
新的GUI系统的GUI布局和外观设置机器的简单,每一个空间都是一个GamObject因为可以像其他的GameObject一样使用,包括添加控件,设置位置等等。
要创建新的GUI控件,只需要直接选择菜单GameObject—>UI在选择你要创建的对象即可。
首先你需要创建一个Canvas来容纳你创建的GUI控件,Canvas控件最重要的属性就是Canvas控件了:
在这里可以选择渲染模式,有3种模式可选: Screen-Space Overlay Screen-Space Camera World-Space
第一种是屏幕空间的GUI,这种GUI是渲染在屏幕空间的,也就是始终都被依附在窗口屏幕上,不会因为摄像机或者角色位置的变化而产生任何变化,就算你禁用场景的中的所有摄像机,这些GUI都还在,详细见下图,注意我已经在右边禁用了所有摄像机,然而GUI界面依然还在。
第二种是依附摄像机的屏幕空间GUI,这种GUI是渲染在摄像机前面的一块区域上面的,他会跟随你的摄像机的运动而运动,同时摄像机的任何变换都有可能因想到这个GUI,这个可以用来做类似《孤岛危机》中GUI的那种歪斜特效。下图将会帮助我理解这件事情:
第三种世界空间的GUI就很简单了,那就是在GameObject空间中渲染的GUI,这种GUI会存在于世界的某个固定位置,不会因为摄像机的移动而改变。这个懂事适合于用来做NPC人物头顶的对话框。参考下图:
这两个按钮一个在近处一个在远处,都是在世界空间中的。 下面我将要描述,我学习使用新GUI制作上述界面的过程:
首先,必然是添加一堆空间到编辑器中,按照想要的是顺序调节好位置,一个组的GUI都会作为一个PanelGUI的子对象对待,所以下图所有的按钮滚动条都被放置到Panel 1下:
这样移动panel就会同时移动所有的子控件了。
放好所有的控件,调好位置之后,调节那些控件的属性,以Button为例:
Buton这个控件还有一个子对象Text,用来描述Button上的字体,右边就是他的属性。 左边Button第一个属性Image定义了这个GameObject的显示样子,也就是显示成什么颜色,什么材质,使用什么源图片。下面的Button组件定义了一些针对Button的外观细节,OnClick则是关联UI逻辑的地方,左边的可以选择reltime还是editor抑或是全部,这决定了这个UI是在游戏中有效还是在编辑器中有效,下面将会选择此UI关联的对象,右边第一个决定了在点击后此UI控件执行的事件,这里选择的是sendmessage,右下是