本书为第三版,采用 Unity2023.2 版本进行教学。在第二版的基础上,更新了理论知识体系,并进一步优化了章节内容。配合提供的 PPT 与教学案例资料,本书更加适合广大高校的"虚拟现实”与"数字媒体”等相关专业的学生进行系统教学。与第二版不同,本书新增了 Unity2023 版本一些新的技术特性:Unity 高版本全新编辑器界面知识、全新Unity 地形编辑器知识、新 UI 的 TextMeshPro 插件讲解、新输入系统、URP 渲染管线、最新导航寻路技术,以及补充业界普遍使用的 DoTween 动画插件技术等。本书分为实战项目篇与开发理论篇两部分。书中通过四大教学案例,由浅入深地展开:两个虚拟现实项目案例和两个 3D 游戏开发教学案例。旨在解决广大师生普遍存在的"掌握了大量理论知识,却缺乏实际开发经验”的问题。通过本书的学习,零基础的学员将能够在掌握系统的理论知识和丰富的案例内容后,迅速胜任虚拟现实与游戏开发等职位的技能要求。本书从初学者易于入门的角度,将全书分为 22 个章。第 1~14 章为入门内容,专为零基础学习虚拟现实与游戏开发的在校大学生准备。采用"案例化”的教学思路,将所学知识与实际案例紧密结合。第 15~22章为进阶内容,主要讲解新输入系统、Unity 2D、项目常用组件与插件、渲染管线 URP 技术、Mecanim 动画系统、导航寻路、射线技术、项目优化策略等实用技术。特别说明:为了更好地服务于高校教学,本书中的四大实战案例仅提供在配套的电子学习资料中,供读者深入研究与学习。
刘国柱,毕业于山东科技大学,二十多年软件、虚拟现实、游戏领域的研发、教学与企业培训经验。具备深厚的编程基础,历任大型上市企业做研发经理,产品总监等职位,精通大型软件运作管理和软件架构设计等。现任某大型虚拟现实公司研发产品线负责人。
目 录
第1章 虚拟现实与游戏行业发展史1
1.1 虚拟现实发展史1
1.1.1 什么是“虚拟现实”1
1.1.2 虚拟现实技术特性与原理1
1.1.3 VR行业的发展历程3
1.1.4 VR产业链4
1.1.5 VR技术的应用范围与广阔前景8
1.1.6 VR行业岗位需求9
1.1.7 VR技术与元宇宙的关系9
1.1.8 国内VR行业的政策指导10
1.2 电子游戏发展史11
第2章 Unity主要特征与下载安装15
2.1 什么是游戏(虚拟现实)引擎15
2.1.1 游戏引擎的功能15
2.1.2 为什么需要使用游戏引擎16
2.1.3 游戏引擎的发展17
2.2 游戏(虚拟现实)引擎主要特征17
2.2.1 Unity游戏引擎的特点17
2.2.2 Unity引擎的主要特性18
2.3 Unity引擎版本变化与命名规则18
2.4 Unity2023版本下载与安装21
2.5 Unity的资源商店28
2.6 本章练习与总结28
第3章 Unity编辑器与3D模型29
3.1 Unity编辑器界面29
3.1.1 Unity编辑器的布局与调整30
3.1.2 Unity编辑器各个重要视图与作用30
3.2 3D模型入门操作32
3.2.1 3D模型的位移、旋转与缩放32
3.2.2 3D模型操作快捷方式34
3.2.3 选择3D模型的“正”方向34
3.2.4 使用属性窗口进行精确调整35
3.3 开发Unity“Hello World”36
3.4 Unity编辑器进一步讲解39
3.4.1 Unity菜单39
3.4.2 项目视图42
3.4.3 场景视图43
3.4.4 视图显示模式46
3.4.5 场景视图的查看与导航46
3.5 世界、局部与左手坐标系47
3.5.1 现实世界的“世界坐标”与“局部坐标”47
3.5.2 演示两种坐标的差异47
3.5.3 使用脚本方式演示差异48
3.5.4 什么是“左手坐标系”49
3.5.5 使用控制台窗口进行代码调试49
3.6 脚本知识入门50
3.6.1 键盘与鼠标输入代码50
3.6.2 环绕旋转50
3.7 小项目开发:地球环绕太阳旋转50
3.8 本章练习与总结53
3.9 案例开发任务53
第4章 地形编辑器54
4.1 创建基本地形54
4.2 本章练习与总结61
4.3 案例开发任务62
第5章 光源63
5.1 概述63
5.2 光源的分类与重要参数65
5.3 典型光源场景制作65
5.4 本章练习与总结67
5.5 案例开发任务67
第6章 光照烘焙68
6.1 概述68
6.2 光照烘焙69
6.3 反射探头(Reflection Probe)71
6.4 光照探头(Light Probe)73
6.5 光照预览(Light Explorer)74
6.6 本章练习与总结75
6.7 案例开发任务75
第7章 音频76
7.1 概述76
7.2 音频剪辑属性76
7.3 音频监听与音频源组件77
7.4 音频混响器与音频滤波器组件79
7.5 音频混音器(Audio Mixer)80
7.6 本章练习与总结86
7.7 案例开发任务86
第8章 Unity脚本程序设计87
8.1 Unity脚本编辑器介绍87
8.1.1 什么是.NET框架87
8.1.2 Mono与MonoDevelop87
8.1.3 Visual Studio88
8.2 脚本程序基础89
8.2.1 创建脚本注意事项89
8.2.2 项目工程分层设计89
8.2.3 更改脚本模板90
8.3 Unity重要脚本函数90
8.3.1 Unity事件函数90
8.3.2 Untiy重要核心类学习90
8.3.3 GameObject类91
8.3.4 MonoBehaviour类95
8.3.5 Transform类98
8.3.6 Time类99
8.4 Unity脚本生命周期99
8.4.1 Unity事件函数调用顺序100
8.4.2 事件函数禁用与启用规律103
8.5 Unity伪多线程揭秘105
8.6 修改Unity脚本执行顺序106
8.7 Unity重要应用类108
8.8 Unity输入管理器109
8.9 本章练习与总结111
第9章 UI界面开发112
9.1 概述112
9.2 基础控件114
9.2.1 Canvas控件114
9.2.2 Event System控件115
9.2.3 Panel控件116
9.2.4 Text控件116
9.2.5 Image控件118
9.2.6 Button控件119
9.2.7 Button事件系统121
9.3 Anchor锚点与屏幕自适应123
9.4 UGUI高级控件124
9.4.1 Toggle控件124
9.4.2 Slider控件125
9.4.3 Scrollbar控件126
9.4.4 Scroll Rect复合控件127
9.4.5 TabPage控件129
9.5 UGUI布局管理控件131
9.6 TextMeshPro插件134
9.7 本章练习与总结135
9.8 案例开发任务136
第10章 3D模型与动画制作137
10.1 概述137
10.2 3DMax软件基本使用137
10.3 3D模型尺寸单位设置139
10.4 3DMax模型制作与导出Unity流程139
10.5 模型导出丢失贴图问题143
10.6 3D文字的制作与动画143
10.7 Legacy角色动画145
10.8 Animation动画编辑工具147
10.9 自定义资源包的导入与导出151
10.10 本章练习与总结154
10.11 案例开发任务154
第11章 物理学模拟155
11.1 概述155
11.2 刚体155
11.3 物理材质159
11.4 脚本控制刚体161
11.5 关节系统162
11.5.1 铰链关节162
11.5.2 弹簧关节164
11.5.3 固定关节165
11.6 物理设置(Physics Settings)166
11.7 本章练习与总结167
第12章 碰撞体与触发器168
12.1 概述168
12.2 碰撞体的分类与作用169
12.3 碰撞检测事件函数170
12.4 触发检测事件函数172
12.5 碰撞过滤173
12.6 本章练习与总结176
12.7 案例开发任务177
第13章 协程与调用函数178
13.1 协程定义与功能178
13.2 调用函数定义与功能179
13.3 协程与调用函数的区别和适用范围179
13.4 本章练习与总结180
13.5 案例开发任务180
第14章 数据传值技术181
14.1 概述181
14.2 SendMessage简单传值181
14.3 SendMessage高级传值183
14.4 本章练习与总结184
第15章 新输入系统185
15.1 概述185
15.2 配置新输入系统186
15.2.1 创建“Input Action”配置文件186
15.2.2 配置常用移动与跳跃选项187
15.2.3 保存配置与生成配置类188
15.2.4 编写移动与跳跃控制脚本189
15.3 应用脚本实验190
第16章 Unity2D技术191
16.1 概述191
16.2 项目示例讲解191
16.3 Untiy2D物理引擎196
16.3.1 2D刚体196
16.3.2 2D碰撞体197
16.3.3 2D关节系统199
16.4 Unity2D特效功能199
16.4.1 Sprite Mask功能199
16.4.2 精灵效应器组件201
16.5 本章练习与总结205
第17章 Unity常用组件与插件206
17.1 Line Renderer & Trail Renderer206
17.2 DOTween插件209
17.2.1 概述209
17.2.2 基础常用功能209
17.2.3 路径动画211
17.2.4 摄像机特效213
17.2.5 文字特效与序列动画控制213
17.2.6 动画控制与精细控制214
17.3 粒子系统215
17.3.1 概述215
17.3.2 粒子系统组件属性215
17.3.3 粒子系统示例221
17.3.4 Unity粒子包222
17.3.5 粒子系统的脚本调用方式223
17.4 本章练习与总结225
第18章 Mecanim动画系统226
18.1 概述226
18.2 制作Mecanim动画系统226
18.2.1 步骤一:制作Avatar(替身)227
18.2.2 步骤二:设置动画状态机(Animator Controller)229
18.2.3 步骤三:设置动画循环233
18.2.4 步骤四:使用代码控制角色动画233
18.3 融合树技术234
18.4 动画层与身体蒙版238
18.5 动画复用技术241
18.6 StateMachineBehaviour脚本241
18.7 本章练习与总结243
第19章 URP技术244
19.1 什么是URP244
19.2 创建URP项目245
19.3 如何升级到URP248
19.4 材质升级URP249
19.5 本章练习与总结250
第20章 导航寻路251
20.1 基本导航寻路251
20.2 斜坡与跳跃253
20.3 NavMeshLink组件254
20.4 Nav Mesh Obstacle组件255
20.5 NavMeshSurface组件256
20.6 本章练习与总结258
第21章 项目优化策略259
21.1 遮挡剔除(Occlusion Culling)259
21.2 层级细节(LOD)262
21.3 项目调优工具数据分析器(Profiler)265
21.4 项目优化策略267
21.4.1 项目优化之Draw Call267
21.4.2 项目优化之模型与图像方面269
21.4.3 项目优化之光照与摄像机方面271
21.4.4 项目优化之程序优化方面273
21.4.5 项目优化之Unity系统设置方面275
21.4.6 项目优化之良好开发与使用习惯276
21.5 本章练习与总结277
第22章 射线278
22.1 射线概述278
22.2 项目示例讲解278
22.2.1 射击场景开发278
22.2.2 角色寻路开发280
22.3 本章练习与总结281
附录A 全国Unity游戏研发职位笔试面试真题集锦282
附录B Unity开发常见错误与分析283
附录C Unity特殊文件夹一览表284