本书以Unity 5.x版本为例,结合大量游戏开发案例,从实战角度系统地介绍Unity 3D的使用方法、经验及游戏开发基础知识。
本书分为3部分。第1部分为基础知识篇(第1~9章)。第2部分为综合实践篇(第10、11章)。第3部分为VR&AR篇(第12、13章)。基础知识篇主要介绍Unity 3D基础知识,包括Unity 3D概述、操作界面、脚本编写、图形用户界面系统、三维漫游地形系统、物理引擎、模型与动画、导航系统及游戏特效等内容,从总体上对Unity 3D进行概要性介绍。综合实践篇主要通过2D卡牌游戏开发和3D射击游戏开发使读者对Unity 3D游戏开发有较全面的认识,掌握开发一般休闲游戏的能力。VR&AR篇主要介绍时下非常流行的虚拟现实及增强现实技术,通过实践案例使读者掌握VR和AR开发流程。每章均附有习题。
本书适合作为高等院校数字媒体技术、数字媒体艺术及相关专业的教材,同时也适合广大Unity 3D初学者以及Unity 3D游戏开发和研究人员参考。
第3章〖5〗Chapter 3Unity 3D脚本开发基础脚本是一款游戏的灵魂,Unity 3D脚本用来界定用户在游戏中的行为,是游戏制作中不可或缺的一部分,它能实现各个文本的数据交互并监控游戏运行状态。以往,Unity 3D主要支持3种语言: C#、UnityScript(也就是JavaScript for Unity)以及Boo。但是选择Boo作为开发语言的使用者非常少,而Unity公司还需要投入大量的资源来支持它,这显然非常浪费。所以在Unity 5.0后,Unity公司放弃对Boo的技术支持。目前,官方网站上的教程及示例基本上都是关于JavaScript和C#语言的,使用JavaScript语言更容易上手,建议初学者选择JavaScript作为入门阶段的脚本编辑语言。到了进阶阶段,可以改用C#语言编辑脚本,因为C#语言在编程理念上符合Unity 3D引擎原理,本章主要以JavaScript和C#语言为例讲解Unity 3D脚本设计。
3.1JavaScript脚本基础
Unity 3D中的JavaScript也称UnityScript,和基于浏览器的JavaScript有比较大的区别,JavaScript是一种由Netscape公司的LiveScript发展而来的原型化继承的面向对象类语言,并且是一种区分大小写的客户端脚本语言。
3.1.1变量
JavaScript有4种变量:
(1) 数值变量。数值是最基本的数据类型。例如:var a=1000;
var b=3.1415926;(2) 字符串变量。是由单引号或者双引号括起来的Unicode字符序列。
(3) 布尔值。只有两个值: true和false,用来表示某个事物为真还是为假。
(4) 数组。是数据的集合,数组中的每一个数据元素都有一个编号(下标),数组的下标是从0开始的。
3.1.2表达式和运算符
表达式是关键字、变量、常量和运算符的组合,可以用于执行运算、处理字符或测试数据。JavaScript的解释引擎可以计算表达式,并返回一个结果值。JavaScript的运算符分为〖1〗〖2〗〖1〗〖3〗以下6类。
(1) 算术运算符。指的是数学中最基本的加减乘除等运算。算术运算符需要两个操作数,因此也称二元运算符。假设有操作数a、b,它们的算术运算符如表3.1所示。表3.1算术运算符
算术运算符说明使用方法+两变量相加a+b-两变量相减a-b两变量相乘ab/两变量相除a/b%求余数a%b++变量做+1操作a=a+1--变量做-1操作a=a-1(2) 相等运算符。用来比较两个值,根据比较结果返回一个布尔值,广义的相等运算符包含以下4种:
相等运算符(==)。
等同运算符(===)。
不等运算符(!=)。
不等同运算符(!===)。
目录
第1章初识Unity 3D1
1.1Unity 3D简介1
1.1.1Unity 3D的特色1
1.1.2Unity 3D的发展2
1.1.3Unity 3D的应用3
1.2Unity 3D下载与安装6
1.2.1Unity 3D下载6
1.2.2Unity 3D安装7
1.3资源管理14
1.3.1创建新项目14
1.3.2创建游戏物体15
1.3.3添加游戏物体组件16
1.3.4项目保存16
1.4Unity 3D游戏发布18
1.4.1发布到PC平台19
实践案例: PC平台游戏场景发布21
1.4.2发布到Web平台25
实践案例: Web平台游戏场景发布25
1.4.3发布到Android平台27
实践案例: Android平台游戏场景发布32
1.5本章小结36
1.6习题36
第2章Unity 3D界面37
2.1Unity 3D界面布局37
2.2Hierarchy视图38
2.2.1视图布局39
2.2.2操作介绍39
2.3Project视图39
2.3.1视图布局40
2.3.2操作介绍40[1][2][1][3]2.4Inspector视图41
2.4.1视图布局41
2.4.2操作介绍41
2.5Scene View视图42
2.5.1视图布局42
2.5.2操作介绍43
2.6Game View视图45
2.6.1视图布局45
2.6.2操作介绍45
2.7菜单栏46
2.7.1File菜单46
2.7.2Edit菜单46
2.7.3Assets菜单47
2.7.4GameObject菜单48
2.7.5Component菜单49
2.7.6Window菜单50
2.7.7Help菜单50
2.8工具栏51
2.9其他快捷键51
实践案例: 自由物体创建52
2.10资源管理56
2.10.1导入系统资源包58
2.10.2导入外部资源包59
2.10.3资源导出60
2.11Unity资源商店62
2.11.1Unity资源商店简介62
2.11.2Unity资源商店使用63
综合案例: 创建简单3D场景64
2.12本章小结69
2.13习题69
第3章Unity 3D脚本开发基础70
3.1JavaScript脚本基础70
3.1.1变量70
3.1.2表达式和运算符70
3.1.3语句72
3.1.4函数74
3.2C#脚本基础74
3.2.1变量74
3.2.2表达式和运算符77
3.2.3语句77
3.2.4函数79
3.3Unity 3D脚本编写80
3.3.1创建脚本80
3.3.2链接脚本81
3.3.3运行测试83
3.3.4C#脚本编写注意事项83
实践案例: 脚本环境测试85
实践案例: 创建游戏对象86
实践案例: 旋转的立方体90
综合案例: 第一人称漫游91
3.4本章小结96
3.5习题96
第4章Unity 3D图形用户界面97
4.1Unity 3D图形界面概述97
4.1.1GUI的概念97
4.1.2GUI的发展97
4.2OnGUI系统98
4.2.1Button控件98
4.2.2Box控件102
4.2.3Label控件103
4.2.4Background Color控件104
4.2.5Color控件105
4.2.6TextField控件106
4.2.7TextArea控件107
4.2.8ScrollView控件108
4.2.9Slider控件109
4.2.10ToolBar控件111
4.2.11ToolTip控件111
4.2.12Drag Window控件112
4.2.13Window控件113
4.2.14纹理贴图115
4.2.15Skin控件116
4.2.16Toggle控件119
4.3UGUI系统120
4.3.1Canvas121
4.3.2Event System122
4.3.3Panel 控件123
4.3.4Text控件123
4.3.5Image控件 124
4.3.6Raw Image控件124
4.3.7Button控件125
4.3.8Toggle控件126
4.3.9Slider控件127
4.3.10Scrollbar控件127
4.3.11Input Field控件128
实践案例: 游戏界面开发130
4.4本章小结136
4.5习题136
第5章三维漫游地形系统137
5.1地形概述137
5.2Unity 3D地形系统创建流程138
5.2.1创建地形138
5.2.2地形参数138
5.3使用高度图创建地形139
实践案例: 采用高度图创建地形139
5.4地形编辑工具141
5.4.1地形高度绘制141
5.4.2地形纹理绘制142
5.4.3树木绘制143
5.4.4草和其他细节144
5.4.5地形设置145
5.4.6风域146
5.5环境特效147
5.5.1水特效147
5.5.2雾特效148
5.5.3天空盒149
综合案例: 3D游戏场景设计150
5.6本章小结161
5.7习题161
第6章物理引擎162
6.1物理引擎概述162
6.2刚体162
6.2.1刚体添加方法163
6.2.2刚体选项设置163
实践案例: 刚体测试164
6.3碰撞体167
6.3.1碰撞体添加方法167
6.3.2碰撞体选项设置167
6.4触发器170
实践案例: 碰撞消失的立方体171
6.5物理材质174
实践案例: 弹跳的小球175
6.6力177
实践案例: 力的添加177
6.7角色控制器179
6.7.1添加角色控制器179
6.7.2角色控制器选项设置179
6.8关节180
6.8.1铰链关节180
6.8.2固定关节181
6.8.3弹簧关节181
6.8.4角色关节182
6.8.5可配置关节182
6.9布料184
6.9.1添加布料系统184
6.9.2布料系统属性设置184
6.10射线185
实践案例: 拾取物体185
6.11物理管理器187
综合案例: 迷宫夺宝188
6.12本章小结194
6.13习题194
第7章模型与动画195
7.1三维模型概述195
7.1.1主流三维建模软件简介195
7.1.2三维模型导入Unity 3D196
7.2Mecanim动画系统200
7.3人形角色动画200
7.3.1创建Avatar201
7.3.2配置Avatar202
7.3.3人形动画重定向202
7.4角色动画在游戏中的应用203
7.4.1Animator组件203
7.4.2Animator Controller203
7.4.3Animator动画状态机204
实践案例: 模型动画204
7.5本章小结208
7.6习题208
第8章导航系统209
8.1Unity 3D导航系统209
8.1.1设置NavMesh209
8.1.2烘焙209
8.1.3设置导航代理211
实践案例: 自动寻路212
8.2障碍物214
实践案例: 障碍物绕行214
8.3本章小结216
8.4习题216
第9章游戏特效217
9.1粒子系统217
9.1.1粒子系统概述217
9.1.2粒子系统属性217
实践案例: 尾焰制作225
实践案例: 礼花模拟227
实践案例: 火炬模拟228
实践案例: 喷泉模拟231
9.2光影特效234
9.2.1光照基础234
9.2.2阴影238
实践案例: 光照过滤239
9.3音乐特效241
9.3.1导入音效241
9.3.2播放音效241
实践案例: 背景音乐播放243
综合案例: 万圣节的尖叫246
9.4本章小结251
9.5习题251
第10章二维卡牌游戏开发253
10.1正交摄像机253
10.2精灵254
10.2.1精灵的实现254
10.2.2精灵的尺寸255
10.2.3精灵渲染器255
10.2.4图片导入设置256
10.2.5精灵编辑257
10.3二维物理系统257
10.3.1刚体257
10.3.2碰撞体258
10.3.3Joint 2D261
实践案例: 帧动画264
综合案例: 二维卡牌游戏开发265
10.4本章小结277
10.5习题277
第11章3D射击游戏开发278
11.13D射击游戏构思278
11.23D射击游戏设计278
11.33D射击游戏实施279
11.3.1项目准备279
11.3.2武器设定283
11.3.3子弹设定286
11.3.4射击动画293
11.3.5射击功能298
11.3.6游戏优化299
11.3.7游戏发布300
11.4本章小结301
11.5习题302
第12章虚拟现实应用开发303
12.1虚拟现实概述303
12.1.1虚拟现实概念303
12.1.2虚拟现实系统基本特征303
12.1.3虚拟现实系统分类303
12.1.4虚拟现实系统组成304
12.1.5虚拟现实应用305
12.2虚拟现实开发软件及平台307
12.2.1Virtools307
12.2.2Quest 3D307
12.2.3VRPlatform307
12.2.4Unity 3D308
12.2.5Unreal Engine4309
12.3虚拟现实开发设备310
12.3.1Oculus Rift310
12.3.2Microsoft HoloLens313
12.3.3Gear VR314
12.3.4HTC Vive314
实践案例: 交互式虚拟漫游326
12.4本章小结333
12.5习题333
第13章增强现实开发334
13.1增强现实概述334
13.1.1增强现实概念334
13.1.2增强现实原理334
13.1.3增强现实应用335
13.1.4增强现实开发插件335
13.2Vuforia发展历程335
13.3Vuforia核心功能336
13.3.1图片识别336
13.3.2圆柱体识别336
13.3.3多目标识别337
13.3.4文字识别337
13.3.5云识别337
实践案例: AR动物开发338
13.4本章小结347
13.5习题347
参考文献348