文档介绍:第1章回顾与展望
最新的Unity UI系统经过开发人员多年研发方得以面世(开发过程受到了预算紧缩的考验),其中包含了诸多最新特性并以免费方式提供给广大用户。
在讨论新系统之前,需要对遗留GUI系统(即旧系统,具有向后兼容之特性)予以回顾,进而在此基础上理解新系统的功能和应用,而传统教程还停留在遗留GUI阶段。
在读者理解了遗留系统后,本书将对新系统加以重点分析,这也是后续内容的主要工作。
本章主要涉及以下内容:
Unity遗留GUI系统的回顾。
与遗留GUI系统相关的建议、技巧和讲解。
新系统特性概览。
购买 Packt 出版社书籍的读者可通过个人账号在码文件。另外,读者还可访问port,经注册后可通过邮件方式直接获得相关文件。除此之外,作者还提供了支持论坛,读者可直接向作者进行提问;另外,论坛中还包含了相关的注意事项,对应网址为。
发展状况
Unity的遗留GUI系统历经多年发展添加了诸多新特性,并对性能问题有所改善。考虑到在原始实现基础上得以完成,因而系统包含了某些限制条件,且需要向后兼容(类似于Windows操作系统,时至今日,该系统仍然需要服务于采用BASIC语言编写的程序。关于BASIC语言,读者可访问http://en./wiki/BASIC)。这里并非认为遗留系统一无是处,与Unity ,该系统在新特性方面有所欠缺。在新系统中,采用了更为高级的设计方案以及全新的核心内容。
遗留系统中的主要缺陷在于,该系统仅在3D元素之上的屏幕空间内进行绘制(而非其“内部”)。对于菜单或标题中的覆盖图,这并无太大问题;而在3D场景中,其整合方式将变得较为困难。
关于世界空间和屏幕空间的更多内容,读者可参考Unity Answers,对应网址为http://answers./questions/256817/about-world-space-and-local-。
因此,在讲述新系统的优点之前,首先需要考查该系统的根源(如果读者对遗留系统较为熟悉,则可忽略本节内容)。
本书将遗留GUI简称为GUI。相应地,当讨论新系统时,该系统则称作UI或Unity UI。用户在阅读时不可将其混为一谈。
另外,读者在Web或论坛中可能还会遇到uGUI这一类术语,该术语表示Unity UI新系统的研发代码。
GUI控件相关介绍如下。
遗留系统空间针对标题应用提供了基本的风格化控制。
遗留系统中的全部控件均采用内建的OnGUI方法,并在GUI渲染阶段进行绘制。在相关示例中,全部控件实例位于Assets\。
针对功能性GUI空间,场景中的相机须于其上绑定GUILayer组件。默认条件下,该组件位于场景中的Camera对象上,且多数情况下用户不会对其有所察觉。若将其移除,则GUI工作时需要再次将其加入。
针对OnGUI委托处理程序,该组件可视为钩子程序,以确保其在每帧内被调用。
类似于脚本中的Update方法,如果渲染操作降低了运行速度,OnGUI方法将在每帧内多次被调用。当构建自己的遗留GUI脚本时,用户应对此引起足够的重视。
原GUI中的控件包含以下内容:
标签
纹理
按钮
文本框(包括单行文本框、多行文本框及密码文本框等)
列表框
工具栏
滑块
滚动条
窗口
下面将对此进行逐一考查。
对于GUI脚本中的示例项目,全部代码均位于下载代码中的Assets\Scripts文件夹中。
当读者对此进行尝试时,须创建新项目、场景以及脚本,针对脚本中的各个控件设置代码,最后还需将该脚本绑定至相机对象上(将其从项目视图拖曳至场景层次结构中的Main Camera GameObject中)。随后,可运行该项目,或者利用[ExecuteInEditMode]属性修饰当前类,进而在游戏视图中对其进行查看。
1. Label控件
大多数GUI系统中均会首先介绍Label控件,这一类控件提供了风格化的控制效果,并在屏幕上显示只读文本。脚本中一般会包含下列方法:
void OnGUI() {
(new Rect(25, 15, 100, 30), "Label");
}
这将生成如图1-1所示的屏幕显示效果。
图1-1
Label控件可通过guiText GameObject属性()或GUIStyle(稍后将对此加以讨论)调整字体设置。
,可在脚本中使用下列代码,对应位置可位于Awake/Start函数中,或者绘制下一个文本段(采用另一种字体)之前