书籍详情
Unity实战(第3版)
作者:[美]约瑟夫·霍金(Joseph Hocking)著,王冬 殷崇英 译
出版社:清华大学出版社
出版时间:2023-08-01
ISBN:9787302638254
定价:¥99.80
购买这本书可以去
内容简介
编写游戏能获得较丰厚的回报并且充满乐趣——使用Unity,很容易上手编写游戏!Unity会为我们处理繁重的工作,所以你可以专注于游戏玩法、图像和用户体验。C#的支持和一个庞大的预构建组件生态系统甚至可以帮助开发新手快速从绘图板转向屏幕。 《Unity实战(第3版)》介绍如何使用Unity游戏平台创建游戏。其中包含的许多2D、3D和AR/VR游戏示例能让你亲身体验Unity的工作流程和**进的渲染引擎。《Unity实战(第3版)》已完全更新,介绍了Unity的XR工具包,展示了如何开始构建VR和AR应用。 ● 创建跑、跳、撞东西的角色 ● 用AI编写敌人脚本 ● 播放音乐和空间感知音效 ● 将游戏部署到桌面、手机和网页上
作者简介
Joseph Hocking 是一位专门从事交互式媒体开发的软件工程师。他目前在高通公司工作,在BUNDLAR 工作时编写了本书第3 版的大部分内容,在Synapse Games 工作时编写了本书的第1 版。他还曾在伊利诺伊大学芝加哥分校、芝加哥艺术学院和芝加哥哥伦比亚学院授课。他与妻子和两个孩子住在芝加哥郊区。更多信息可以访问他的个人网站(见链接[1])。
目录
第Ⅰ部分 起步
第1 章 初识Unity.3
1.1 为什么Unity 如此优秀4
1.1.1 Unity 的优势4
1.1.2 要意识到的缺点6
1.1.3 使用Unity 构建的游戏示例7
1.2 如何使用Unity10
1.2.1 Scene 视图、Game 视图和工具栏12
1.2.2 使用鼠标和键盘.14
1.2.3 Hierarchy 视图和Inspector面板14
1.2.4 Project 和Console 标签.15
1.3 开始使用Unity 编程16
1.3.1 在Unity 中运行代码:脚本组件16
1.3.2 使用附带的IDE:Visual Studio.18
1.3.3 打印到Console 视图:Hello World!19
1.4 小结21
第2 章 构建一个令人置身3D 空间的演示游戏.23
2.1 在开始之前24
2.1.1 对项目做计划24
2.1.2 了解3D 坐标空间.25
2.2 开始项目:在场景中放置对象 27
2.2.1 布景:地面、外墙和内墙 27
2.2.2 光源和摄像机. 29
2.2.3 玩家的碰撞器和视点. 31
2.3 移动对象:应用变换的脚本 32
2.3.1 图示说明如何通过编程实现移动 32
2.3.2 编程实现图中演示的运动 32
2.3.3 理解局部和全局坐标空间 34
2.4 用于观察周围情况的脚本组件:MouseLook. 35
2.4.1 跟踪鼠标移动的水平旋转 37
2.4.2 有限制的垂直旋转 38
2.4.3 同时进行水平和垂直旋转 40
2.5 键盘输入组件:第一人称控制 42
2.5.1 响应按键. 43
2.5.2 设置独立于计算机运行速度的移动速率 44
2.5.3 移动CharacterController以检测碰撞 44
2.5.4 将组件调整为走路而不是飞翔46
2.6 小结48
第3 章 在3D 游戏中添加敌人和子弹.49
3.1 通过射线投射射击50
3.1.1 什么是射线投射.50
3.1.2 使用ScreenPointToRay命令射击.51
3.1.3 为瞄准点和击中点添加可视化指示器53
3.2 编写反应性目标脚本.56
3.2.1 确定被击中的对象56
3.2.2 警告目标被击中.57
3.3 漫游AI 基础58
3.3.1 图解基础AI 的工作原理.58
3.3.2 使用射线投射发现障碍物59
3.3.3 跟踪角色的状态.61
3.4 生成敌人预制体62
3.4.1 什么是预制体63
3.4.2 创建敌人预制体.63
3.4.3 在不可见的Scene Controller 中实例化.64
3.5 通过实例化对象进行射击.67
3.5.1 创建子弹预制体.67
3.5.2 发射子弹并和目标碰撞69
3.5.3 伤害玩家.71
3.6 小结72
第4 章 为游戏开发图形.73
4.1 了解美术资源.73
4.2 构建基础3D 场景:白盒76
4.2.1 白盒的解释76
4.2.2 为关卡绘制平面图 77
4.2.3 根据平面图布局几何体 77
4.3 使用2D 图像为场景贴图. 79
4.3.1 选择文件格式. 80
4.3.2 导入图像文件. 81
4.3.3 应用图像. 83
4.4 使用贴图图像产生天空视觉效果 84
4.4.1 什么是天空盒. 84
4.4.2 新建天空盒材质 85
4.5 使用自定义3D 模型 87
4.5.1 选择文件格式. 88
4.5.2 导出和导入模型 89
4.6 使用粒子系统创建效果 91
4.6.1 调整默认效果的参数. 92
4.6.2 为火焰应用新贴图 94
4.6.3 将粒子效果附加到3D对象上 95
4.7 小结 96
第Ⅱ部分 轻松工作
第5 章 使用Unity 的2D 功能构建一款记忆力游戏.99
5.1 设置2D 图形100
5.1.1 为项目做准备100
5.1.2 显示2D 图像(sprite).103
5.1.3 将摄像机切换为2D模式.104
5.2 构建卡片对象并使它响应单击106
5.2.1 用sprite 构建对象.106
5.2.2 鼠标输入代码107
5.2.3 当单击时显示卡片正面.107
5.3 显示不同的卡片图像. 108
5.3.1 通过编程加载图像 109
5.3.2 通过不可见的Scene
Controller 设置图像. 110
5.3.3 实例化卡片的网格 112
5.3.4 打乱卡片. 113
5.4 实现匹配并为匹配评分 114
5.4.1 保存并比较翻开的卡片 115
5.4.2 隐藏不匹配的卡片 116
5.4.3 分数的文本显示. 117
5.5 重启按钮 119
5.5.1 使用SendMessage编写UIButton 组件. 119
5.5.2 从SceneController 中调用LoadScene 121
5.6 小结 122
第6 章 创建基本的2D 平台游戏 123
6.1 设置图形 124
6.1.1 放置墙壁和地面. 124
6.1.2 导入sprite sheet 125
6.2 左右移动玩家. 126
6.2.1 编写键盘控制 127
6.2.2 与墙壁碰撞 128
6.3 播放sprite 动画. 129
6.3.1 讲解Mecanim 动画系统 129
6.3.2 在代码中触发动画的播放 131
6.4 添加跳跃功能. 132
6.4.1 因重力而下落 132
6.4.2 实现向上跃动 133
6.4.3 检测地面. 134
6.5 平台游戏的附加功能. 135
6.5.1 不同寻常的地面:斜坡和单向平台.136
6.5.2 实现移动的平台.137
6.5.3 摄像机控制140
6.6 小结141
第7 章 在游戏中放置GUI143
7.1 在开始写代码之前.144
7.1.1 立即模式GUI 还是高级2D 界面144
7.1.2 规划布局146
7.1.3 导入UI 图像.146
7.2 设置GUI 显示147
7.2.1 为界面创建画布.147
7.2.2 按钮、图像和文本标签.148
7.2.3 控制UI 元素的位置.151
7.3 编程实现UI 中的交互153
7.3.1 编程实现不可见的UIController154
7.3.2 创建弹出窗口155
7.3.3 使用滑动条和输入字段设置值159
7.4 通过响应事件更新游戏161
7.4.1 集成事件系统162
7.4.2 从场景中广播和监听事件.162
7.4.3 从HUD 广播和监听事件.163
7.5 小结165
第8 章 创建第三人称3D 游戏:玩家移动和动画.167
8.1 将摄像机视图调整为第三人称视角169
8.1.1 导入用于观察的角色. 170
8.1.2 将阴影添加到场景 171
8.1.3 围绕玩家角色旋转摄像机 172
8.2 编程控制摄像机的相对移动 175
8.2.1 旋转角色以面向移动方向 176
8.2.2 朝某方向前进 178
8.3 实现跳跃动作. 179
8.3.1 应用垂直速度和加速度 180
8.3.2 修改地面检测来处理边缘和斜坡 181
8.4 设置玩家角色上的动画 185
8.4.1 在导入的模型上定义动画剪辑 187
8.4.2 创建动画控制器. 188
8.4.3 编写操作Animator 组件的代码 192
8.5 小结 193
第9 章 在游戏中添加交互设施和物件. 195
9.1 创建门和其他设施 196
9.1.1 用按键控制开关的门. 196
9.1.2 在开门之前检查距离和朝向 197
9.1.3 创建变色监控器. 199
9.2 通过碰撞与对象交互. 200
9.2.1 和具有物理属性的障碍物碰撞 201
9.2.2 用触发器对象操作门. 202
9.2.3 收集当前关卡散落的物件 205
9.3 管理仓库数据和游戏状态.206
9.3.1 设置玩家和仓库管理器.207
9.3.2 编程实现游戏管理器208
9.3.3 把物品存储在集合对象中:List 与Dictionary.212
9.4 用于使用和装备物品的仓库UI215
9.4.1 在UI 中显示仓库物品215
9.4.2 装备用于开门的钥匙217
9.4.3 使用血量包恢复玩家的血量.219
9.5 小结220
第Ⅲ部分 冲刺阶段
第10 章 将游戏连接到互联网.223
10.1 创建户外场景224
10.1.1 使用天空盒生成天空视觉效果.225
10.1.2 通过代码设置氛围226
10.2 从互联网服务下载天气数据.228
10.2.1 使用协程请求HTTP数据231
10.2.2 解析XML .235
10.2.3 解析JSON.236
10.2.4 基于天气数据更新场景239
10.3 添加网络布告栏240
10.3.1 从互联网加载图像240
10.3.2 在布告栏上显示图像.243
10.3.3 缓存下载的图像以供重用244
10.4 将数据发送到Web服务器. 246
10.4.1 跟踪当前的天气:发送post 请求. 247
10.4.2 PHP 中的服务器端代码 248
10.5 小结 249
第11 章 播放音频:音效和音乐 251
11.1 导入音效 252
11.1.1 支持的文件格式 252
11.1.2 导入音频文件. 254
11.2 播放音效 255
11.2.1 音频剪辑、音源和声音监听器 255
11.2.2 设定循环播放的声音 256
11.2.3 用代码触发音效 257
11.3 使用音频控制接口. 258
11.3.1 建立中心Audio Manager 259
11.3.2 音量控制UI. 261
11.3.3 播放UI 声音 264
11.4 添加背景音乐 265
11.4.1 播放循环音乐. 266
11.4.2 独立控制音乐的音量 269
11.4.3 背景音乐的淡入淡出 271
11.5 小结 274
第12 章 将各部分整合为一个完整的游戏 275
12.1 再次利用项目构建动作RPG 演示游戏. 276
12.1.1 将多个项目的资源和代码装配在一起277
12.1.2 编程实现“点击”控制:角色移动和设备操控.279
12.1.3 使用新界面替换旧GUI.285
12.2 开发总体游戏结构.291
12.2.1 控制任务流和多个关卡292
12.2.2 到达出口,完成一个关卡296
12.2.3 被敌人捉到时闯关失败298
12.3 处理玩家在游戏过程中的进度.299
12.3.1 保存并加载玩家进度299
12.3.2 完成三个关卡,游戏通关303
12.4 小结.305
第13 章 将游戏部署到玩家设备上307
13.1 构建到桌面端:Windows、Mac 和Linux.309
13.1.1 构建应用程序.310
13.1.2 调整Player Settings:设置游戏的名称和图标311
13.1.3 平台依赖的编译311
13.2 构建到Web 端.313
13.2.1 构建嵌入网页的游戏314
13.2.2 与浏览器中的JavaScript通信 314
13.3 构建到移动端:iOS 和Android 318
13.3.1 设置构建工具. 319
13.3.2 贴图压缩 323
13.3.3 开发插件 324
13.4 XR(扩展现实)开发. 332
13.4.1 支持虚拟现实头戴式设备 333
13.4.2 面向移动端增强现实的AR Foundation 334
13.5 小结 339
后记 341
附录A 场景导航和快捷键 343
A.1 使用鼠标进行场景导航. 343
A.2 常用的快捷键 344
附录B 与Unity 一同使用的外部工具. 345
B.1 编程工具. 345
B.1.1 Rider 345
B.1.2 Xcode 345
B.1.3 Android SDK 346
B.1.4 版本控制(Git、SVN) .346
B.2 3D 美术应用程序346
B.2.1 Maya346
B.2.2 3ds Max346
B.2.3 Blender .347
B.2.4 SketchUp.347
B.3 2D 图像编辑器.347
B.3.1 Photoshop347
B.3.2 GIMP.347
B.3.3 TexturePacker 347
B.3.4 Aseprite 和Pyxel Edit .347
B.4 音频软件.348
B.4.1 Pro Tools .348
B.4.2 Audacity 348
附录C 在Blender 中创建长凳模型.349
C.1 构建网格几何体350
C.2 模型的贴图映射353
附录D 在线学习资源357
D.1 其他指南.357
D.2 代码库358
第1 章 初识Unity.3
1.1 为什么Unity 如此优秀4
1.1.1 Unity 的优势4
1.1.2 要意识到的缺点6
1.1.3 使用Unity 构建的游戏示例7
1.2 如何使用Unity10
1.2.1 Scene 视图、Game 视图和工具栏12
1.2.2 使用鼠标和键盘.14
1.2.3 Hierarchy 视图和Inspector面板14
1.2.4 Project 和Console 标签.15
1.3 开始使用Unity 编程16
1.3.1 在Unity 中运行代码:脚本组件16
1.3.2 使用附带的IDE:Visual Studio.18
1.3.3 打印到Console 视图:Hello World!19
1.4 小结21
第2 章 构建一个令人置身3D 空间的演示游戏.23
2.1 在开始之前24
2.1.1 对项目做计划24
2.1.2 了解3D 坐标空间.25
2.2 开始项目:在场景中放置对象 27
2.2.1 布景:地面、外墙和内墙 27
2.2.2 光源和摄像机. 29
2.2.3 玩家的碰撞器和视点. 31
2.3 移动对象:应用变换的脚本 32
2.3.1 图示说明如何通过编程实现移动 32
2.3.2 编程实现图中演示的运动 32
2.3.3 理解局部和全局坐标空间 34
2.4 用于观察周围情况的脚本组件:MouseLook. 35
2.4.1 跟踪鼠标移动的水平旋转 37
2.4.2 有限制的垂直旋转 38
2.4.3 同时进行水平和垂直旋转 40
2.5 键盘输入组件:第一人称控制 42
2.5.1 响应按键. 43
2.5.2 设置独立于计算机运行速度的移动速率 44
2.5.3 移动CharacterController以检测碰撞 44
2.5.4 将组件调整为走路而不是飞翔46
2.6 小结48
第3 章 在3D 游戏中添加敌人和子弹.49
3.1 通过射线投射射击50
3.1.1 什么是射线投射.50
3.1.2 使用ScreenPointToRay命令射击.51
3.1.3 为瞄准点和击中点添加可视化指示器53
3.2 编写反应性目标脚本.56
3.2.1 确定被击中的对象56
3.2.2 警告目标被击中.57
3.3 漫游AI 基础58
3.3.1 图解基础AI 的工作原理.58
3.3.2 使用射线投射发现障碍物59
3.3.3 跟踪角色的状态.61
3.4 生成敌人预制体62
3.4.1 什么是预制体63
3.4.2 创建敌人预制体.63
3.4.3 在不可见的Scene Controller 中实例化.64
3.5 通过实例化对象进行射击.67
3.5.1 创建子弹预制体.67
3.5.2 发射子弹并和目标碰撞69
3.5.3 伤害玩家.71
3.6 小结72
第4 章 为游戏开发图形.73
4.1 了解美术资源.73
4.2 构建基础3D 场景:白盒76
4.2.1 白盒的解释76
4.2.2 为关卡绘制平面图 77
4.2.3 根据平面图布局几何体 77
4.3 使用2D 图像为场景贴图. 79
4.3.1 选择文件格式. 80
4.3.2 导入图像文件. 81
4.3.3 应用图像. 83
4.4 使用贴图图像产生天空视觉效果 84
4.4.1 什么是天空盒. 84
4.4.2 新建天空盒材质 85
4.5 使用自定义3D 模型 87
4.5.1 选择文件格式. 88
4.5.2 导出和导入模型 89
4.6 使用粒子系统创建效果 91
4.6.1 调整默认效果的参数. 92
4.6.2 为火焰应用新贴图 94
4.6.3 将粒子效果附加到3D对象上 95
4.7 小结 96
第Ⅱ部分 轻松工作
第5 章 使用Unity 的2D 功能构建一款记忆力游戏.99
5.1 设置2D 图形100
5.1.1 为项目做准备100
5.1.2 显示2D 图像(sprite).103
5.1.3 将摄像机切换为2D模式.104
5.2 构建卡片对象并使它响应单击106
5.2.1 用sprite 构建对象.106
5.2.2 鼠标输入代码107
5.2.3 当单击时显示卡片正面.107
5.3 显示不同的卡片图像. 108
5.3.1 通过编程加载图像 109
5.3.2 通过不可见的Scene
Controller 设置图像. 110
5.3.3 实例化卡片的网格 112
5.3.4 打乱卡片. 113
5.4 实现匹配并为匹配评分 114
5.4.1 保存并比较翻开的卡片 115
5.4.2 隐藏不匹配的卡片 116
5.4.3 分数的文本显示. 117
5.5 重启按钮 119
5.5.1 使用SendMessage编写UIButton 组件. 119
5.5.2 从SceneController 中调用LoadScene 121
5.6 小结 122
第6 章 创建基本的2D 平台游戏 123
6.1 设置图形 124
6.1.1 放置墙壁和地面. 124
6.1.2 导入sprite sheet 125
6.2 左右移动玩家. 126
6.2.1 编写键盘控制 127
6.2.2 与墙壁碰撞 128
6.3 播放sprite 动画. 129
6.3.1 讲解Mecanim 动画系统 129
6.3.2 在代码中触发动画的播放 131
6.4 添加跳跃功能. 132
6.4.1 因重力而下落 132
6.4.2 实现向上跃动 133
6.4.3 检测地面. 134
6.5 平台游戏的附加功能. 135
6.5.1 不同寻常的地面:斜坡和单向平台.136
6.5.2 实现移动的平台.137
6.5.3 摄像机控制140
6.6 小结141
第7 章 在游戏中放置GUI143
7.1 在开始写代码之前.144
7.1.1 立即模式GUI 还是高级2D 界面144
7.1.2 规划布局146
7.1.3 导入UI 图像.146
7.2 设置GUI 显示147
7.2.1 为界面创建画布.147
7.2.2 按钮、图像和文本标签.148
7.2.3 控制UI 元素的位置.151
7.3 编程实现UI 中的交互153
7.3.1 编程实现不可见的UIController154
7.3.2 创建弹出窗口155
7.3.3 使用滑动条和输入字段设置值159
7.4 通过响应事件更新游戏161
7.4.1 集成事件系统162
7.4.2 从场景中广播和监听事件.162
7.4.3 从HUD 广播和监听事件.163
7.5 小结165
第8 章 创建第三人称3D 游戏:玩家移动和动画.167
8.1 将摄像机视图调整为第三人称视角169
8.1.1 导入用于观察的角色. 170
8.1.2 将阴影添加到场景 171
8.1.3 围绕玩家角色旋转摄像机 172
8.2 编程控制摄像机的相对移动 175
8.2.1 旋转角色以面向移动方向 176
8.2.2 朝某方向前进 178
8.3 实现跳跃动作. 179
8.3.1 应用垂直速度和加速度 180
8.3.2 修改地面检测来处理边缘和斜坡 181
8.4 设置玩家角色上的动画 185
8.4.1 在导入的模型上定义动画剪辑 187
8.4.2 创建动画控制器. 188
8.4.3 编写操作Animator 组件的代码 192
8.5 小结 193
第9 章 在游戏中添加交互设施和物件. 195
9.1 创建门和其他设施 196
9.1.1 用按键控制开关的门. 196
9.1.2 在开门之前检查距离和朝向 197
9.1.3 创建变色监控器. 199
9.2 通过碰撞与对象交互. 200
9.2.1 和具有物理属性的障碍物碰撞 201
9.2.2 用触发器对象操作门. 202
9.2.3 收集当前关卡散落的物件 205
9.3 管理仓库数据和游戏状态.206
9.3.1 设置玩家和仓库管理器.207
9.3.2 编程实现游戏管理器208
9.3.3 把物品存储在集合对象中:List 与Dictionary.212
9.4 用于使用和装备物品的仓库UI215
9.4.1 在UI 中显示仓库物品215
9.4.2 装备用于开门的钥匙217
9.4.3 使用血量包恢复玩家的血量.219
9.5 小结220
第Ⅲ部分 冲刺阶段
第10 章 将游戏连接到互联网.223
10.1 创建户外场景224
10.1.1 使用天空盒生成天空视觉效果.225
10.1.2 通过代码设置氛围226
10.2 从互联网服务下载天气数据.228
10.2.1 使用协程请求HTTP数据231
10.2.2 解析XML .235
10.2.3 解析JSON.236
10.2.4 基于天气数据更新场景239
10.3 添加网络布告栏240
10.3.1 从互联网加载图像240
10.3.2 在布告栏上显示图像.243
10.3.3 缓存下载的图像以供重用244
10.4 将数据发送到Web服务器. 246
10.4.1 跟踪当前的天气:发送post 请求. 247
10.4.2 PHP 中的服务器端代码 248
10.5 小结 249
第11 章 播放音频:音效和音乐 251
11.1 导入音效 252
11.1.1 支持的文件格式 252
11.1.2 导入音频文件. 254
11.2 播放音效 255
11.2.1 音频剪辑、音源和声音监听器 255
11.2.2 设定循环播放的声音 256
11.2.3 用代码触发音效 257
11.3 使用音频控制接口. 258
11.3.1 建立中心Audio Manager 259
11.3.2 音量控制UI. 261
11.3.3 播放UI 声音 264
11.4 添加背景音乐 265
11.4.1 播放循环音乐. 266
11.4.2 独立控制音乐的音量 269
11.4.3 背景音乐的淡入淡出 271
11.5 小结 274
第12 章 将各部分整合为一个完整的游戏 275
12.1 再次利用项目构建动作RPG 演示游戏. 276
12.1.1 将多个项目的资源和代码装配在一起277
12.1.2 编程实现“点击”控制:角色移动和设备操控.279
12.1.3 使用新界面替换旧GUI.285
12.2 开发总体游戏结构.291
12.2.1 控制任务流和多个关卡292
12.2.2 到达出口,完成一个关卡296
12.2.3 被敌人捉到时闯关失败298
12.3 处理玩家在游戏过程中的进度.299
12.3.1 保存并加载玩家进度299
12.3.2 完成三个关卡,游戏通关303
12.4 小结.305
第13 章 将游戏部署到玩家设备上307
13.1 构建到桌面端:Windows、Mac 和Linux.309
13.1.1 构建应用程序.310
13.1.2 调整Player Settings:设置游戏的名称和图标311
13.1.3 平台依赖的编译311
13.2 构建到Web 端.313
13.2.1 构建嵌入网页的游戏314
13.2.2 与浏览器中的JavaScript通信 314
13.3 构建到移动端:iOS 和Android 318
13.3.1 设置构建工具. 319
13.3.2 贴图压缩 323
13.3.3 开发插件 324
13.4 XR(扩展现实)开发. 332
13.4.1 支持虚拟现实头戴式设备 333
13.4.2 面向移动端增强现实的AR Foundation 334
13.5 小结 339
后记 341
附录A 场景导航和快捷键 343
A.1 使用鼠标进行场景导航. 343
A.2 常用的快捷键 344
附录B 与Unity 一同使用的外部工具. 345
B.1 编程工具. 345
B.1.1 Rider 345
B.1.2 Xcode 345
B.1.3 Android SDK 346
B.1.4 版本控制(Git、SVN) .346
B.2 3D 美术应用程序346
B.2.1 Maya346
B.2.2 3ds Max346
B.2.3 Blender .347
B.2.4 SketchUp.347
B.3 2D 图像编辑器.347
B.3.1 Photoshop347
B.3.2 GIMP.347
B.3.3 TexturePacker 347
B.3.4 Aseprite 和Pyxel Edit .347
B.4 音频软件.348
B.4.1 Pro Tools .348
B.4.2 Audacity 348
附录C 在Blender 中创建长凳模型.349
C.1 构建网格几何体350
C.2 模型的贴图映射353
附录D 在线学习资源357
D.1 其他指南.357
D.2 代码库358
猜您喜欢