Unity3D游戏开发菜鸟快速上手指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大家对Unity3D游戏引擎应该并不陌生,因为Unity3D在轻量级游戏开发和跨平台上面有他独特的优势,所以在当前可谓是炙手可热。17xuee游戏学院简单介绍了Unity3D的一些基础。并且有部分内容根据天天飞车项目经验做了简单分析。适合没有接触过Unity3D和手游开发,并想了解其大概的同学。
1Unity3D简介
1.1编辑器简介
编辑器整体视图如图1.1所示。里面包括了Unity常用的编辑窗口:
图1.1 Unity编辑器界面
Project视图、Hierarchy视图、Scene视图、Game视图、Inspector视图、Console视图、Profiler视图。
1.1.1Project视图
Project视图可以理解为工程目录,里面罗列了工程里面的所有资源文件。常见的资源包括:脚本、预设(Prefab)、模型、贴图、动画、Shader等。用户可以通过右上角的搜索框,搜索工程内的文件。
1.1.2Hierarchy视图
Hierarchy视图显示了当前游戏场景中,所有的游戏对象。游戏对象是通过树形结构排布,展开后可以看到每个子节点对象。常用的游戏对象包括:摄像机、场景物件、玩家、光源等。
1.1.3Game视图
Game视图是游戏视角,即游戏最终展示给玩家的内容。游戏视角包括两部分:1、场景中当前摄像机照射的场景;2、游戏UI界面。
1.1.4Scene视图
Scene视图有点像3DMax的编辑环境,在这里可以看到当前场景中的所有游戏对象。双击Hierarchy中的游戏对象,可以在Scene中定位到对应的物件。在游戏运行期间,暂停游戏。开发人员可以在Scene中找到对应的游戏对象,查看当前帧的世界场景,方便查找BUG。
1.1.5Inspector视图
Inspector视图是游戏对象的属性面板。选择一个物件后,可以在Inspector面板中查看或编辑游戏对象的属性。游戏运行期间,修改游戏对象属性,可以马上作用到游戏对象。这一特点对于美术的编辑、程序查BUG或者策划调整游戏参数有很大帮助。
Unity的游戏对象是通过Component(组件)控制的。常见的Component有:Transform(模型坐标)、Collider(碰撞检测器)、Rigidbody(刚体属性)、Animation(动画)、AudioSource (声音源)、Script(游戏脚本)等。
1.1.6Console视图
Console视图是控制台信息输出窗口。输出的信息包括:游戏脚本编译错误信息、游戏运行期间的日志输出、断言、崩溃信息。
1.1.7Profiler视图
Profiler视图是游戏性能分析器。游戏运行期间,每一帧的数据都被记录,并显示在Profiler窗口。在时间轴上,最多可以保存几百帧的数据,点击一个特定的帧上,窗口下面会显示该帧的游戏运行细节,包括CPU使用率、GPU使用率、渲染、内存、音频、物理。
1.2打包与发布
在Unity编辑器中,选择“File -> Build Settings”可以打开游戏打包发布面板。在此面板中,可以选择打包的游戏场景、发布平台以及游戏设置。Unity支持跨平台,所以在这里可以有多种平台选择。打包后的文件格式有:*.swf、*.exe、*.apk、Xcode工程等。
1.3脚本组件
Unity游戏开发中,游戏脚本在游戏开发中是关键要素,游戏的逻辑控制都是由脚本来控制的。Unity支持3种游戏脚本语言:C#、JavaScript和Boo。这三种语言中,C#因为最接近C++更符合大部分程序员编程习惯,所以使用的比较广。而JavaScript就比较容易上手属于入门级别,Boo的使用人数则是最少的。
游戏脚本(类)继承自MonoBehaviour后,该脚本即可以作为一个游戏组件挂到游戏对象上。继承MonoBehaviour后,提供大部分系统控制的脚本函数。下面列了一些常用的函数的执行顺序:
不同游戏脚本之间的执行顺序,可以通过调整游戏脚本优先级来修改。(打开调整面板方式:选择某个脚本文件,在Inspector面板,点击右上角的Execution Order按钮。)
1.4场景切换与数据传递
在打包发布面板,我们可以选择需要包含的游戏场景。在游戏过程中,我们需要切换场景,可以调用Application.LoadLevel()函数。
切换场景的时候,默认会把场景中的物件清空。如果需要把数据从不同场景中传递成问题了。常用的方法有两种:
1、静态数据变量。静态数据变量可以用来桥接不同脚本之间的数据交换。当然也可以作为不同场景之间的数据传递。当然过多的静态变量,对于其管理也是个比较麻烦的问题。
2、利用函数DontDestroynoxss()指定某些物件不随着场景的切换而移除。定义一个长期存在的节点,其实挺方便的。可以把游戏的主框架搭建放在这个节点的脚本控件上,这个脚本就有点像GameMain函数,里面可以定义单件管理器,方便管理游戏数据和流程。
1.5GUI
Unity提供一套自带的GUI系统,但是这套GUI系统实在是太难用了。几乎没有游戏会使用这个原生GUI系统的,也因此催生了很多UI插件。市面上成功用Unity开发的游戏,都是使用UI插件的。最常见的UI插件有:NGUI 和EZGUI。天天飞车采用的是NGUI,所以本文简单介绍一下NGUI。
1.5.1原生GUI系统
原生GUI系统的运行效率低,而且UI需要由程序调整控制,生产效率极低。
下面,我们看一个Unity官网提供的一个用GUI系统的例子。如图1.2,我们需要绘制两个按钮,点击按钮对应输出一个提示语句。代码1是官方给出的代码程序。
可见如果需要调整按钮位置,修改按钮的外观,可能需要修改程序脚本。如果UI较少尚且可以这样做。但是如果游戏UI复杂度较高,这个UI维护成本就非常高了。