虚幻引擎(Unreal Engine)是目前世界知名度高、应用广泛的游戏引擎之一,全新版本的虚幻引擎4(Unreal Engine 4,UE4)非常强大且灵活,为设计人员提供了一 款高效的设计工具。
本书全面介绍了有关UE4的游戏开发技巧。全书从基本的安装和配置讲起,陆续介绍了Gameplay框架、相关的单位、静态网络Actor、光照和渲染、音频系统元素、游戏世界的搭建、蓝图系统以及一系列典型的游戏案例等。读者将从本书了解到关于UE4的各类使用技巧和开发案例。
本书内容全面,讲解细致,非常适合想要学习游戏设计与开发的读者阅读。无论是游戏开发领域的新手,还是普通的游戏爱好者,亦或是想成为游戏开发高手的读者,都能从本书获益。
本书是学习Unreal的经典入门级图书,是24小时系列中的一本,品质很有保障。
同时,本书也是由EPIC Games官方授 权的图书,在内容专业度和可用性方面都得到了更好的保障,是读者不 可 多 得的参考读物。
选用国内专业的游戏专业人士参与翻译,本书译者是知名的Unreal培训机构的讲师,对于游戏开发和计算机编程有着丰富的经验。
Aram Cookson是萨凡纳艺术与设计学院(Savannah College of Art and Design,SCAD)交互设计与游戏开发(Interactive Design and Game Development,IDGD)部的教授。他拥有雕塑绘画艺术学士学位和计算机艺术硕士学位,在完成了硕士学位后,辅助启动了IDGD程序,并担任了9年研究生协调员。在过去的15年里,Aram开发并教授了一系列利用虚幻引擎技术的线下和线上游戏艺术和游戏设计课程。
Ryan DowlingSoka是加拿大温哥华市的微软工作室联盟的战争机器工作室的一名技术美工。他主要负责团队中的内容功能,在虚幻引擎4中制作破坏物体、植被、视觉效果、后期处理和用户界面。之前,他曾在微软公司工作,用Unity5为Microsoft HoloLens开发应用。Ryan在各种娱乐软件创作方面是专家,包括Maya、Houdini、Substance Designer、Photoshop、Nuke和After Effects。Ryan拥有萨凡纳艺术与设计学院的视觉特效艺术学士学位。对互动故事的激情则源于20世纪90年代游戏机角色扮演游戏(《博德之门2》和《异域镇魂曲》)。Ryan专注于应用交互式技术来解决现代游戏中的难题。在制作视频游戏之外的业余时间,Ryan晚上会和他的妻子跳舞。
Clinton Crumpler 目前是加拿大温哥华市的微软工作室联盟的一位高 级环境美术师,之前是Bethesda的战神工作室KIXEYE、Army Game Studio和各种其他独立工作室的一名美术师。Clinton主要关注的领域是环境美术、着色器开发和艺术指导。Clinton与Digital Tutors合 作发布了许多视频教程,主要关注虚幻引擎的游戏美术开发。他在佐治亚州萨凡纳市的萨凡纳艺术与设计学院获得了交互与游戏设计硕士学位和动画艺术学士学位。在到萨凡纳艺术与设计学院前,他已经获得了位于弗吉尼亚州法姆维尔市的朗沃德大学的平面设计艺术学士学位。关于他和他的美术作品的更多信息可以在www.clintoncrumpler.com上找到。
* 1章 虚幻引擎4简介1
1.1 安装虚幻引擎2
1.1.1 下载和安装启动器2
1.1.2 下载和安装虚幻引擎3
1.2 创建你的* 一个项目4
1.3 学习界面5
1.3.1 菜单栏6
1.3.2 模式面板6
1.3.3 世界大纲面板7
1.3.4 细节面板8
1.3.5 内容浏览器面板8
1.3.6 视口面板9
1.4 视图模式和可视化工具10
1.4.1 显示标签11
1.4.2 透视视口在关卡中导航11
1.4.3 关卡编辑器工具栏12
1.5 试玩关卡12
1.6 小结13
1.7 问&答13
1.8 讨论13
1.8.1 提问13
1.8.2 回答13
1.9 练习14
* 2章 理解Gameplay框架15
2.1 可用的资源15
2.1.1 在编辑器中播放16
2.1.2 项目文件夹结构17
2.2 资源引用和引用查看器22
2.3 Gameplay框架23
2.3.1 GameMode类23
2.3.2 Controller类24
2.3.3 Pawn和Character类24
2.3.4 HUD类24
2.4 小结26
2.5 问&答26
2.6 讨论27
2.6.1 提问27
2.6.2 回答27
2.7 练习27
第3章 坐标系、变换、单位和组织28
3.1 理解笛卡儿坐标系28
3.2 使用变换29
3.2.1 变换工具29
3.2.2 平移变换30
3.2.3 缩放变换30
3.2.4 旋转变换30
3.2.5 交互式变换和手动变换31
3.2.6 世界变换和本地变换31
3.3 评估单位和测量31
3.3.1 网格单位32
3.3.2 对齐到网格32
3.4 组织场景33
3.4.1 世界大纲视图33
3.4.2 文件夹34
3.4.3 组合35
3.4.4 图层36
3.5 附加36
3.6 小结37
3.7 问&答38
3.8 讨论38
3.8.1 提问38
3.8.2 回答38
3.9 练习39
第4章 使用静态网格Actor40
4.1 静态网格资源40
4.2 静态网格物体编辑器41
4.2.1 打开静态网格物体编辑器窗口41
4.2.2 导入静态网格资源42
4.3 查看UV布局43
4.4 碰撞壳44
4.4.1 查看碰撞壳45
4.4.2 编辑碰撞壳45
4.4.3 壳分解47
4.4.4 每多边形碰撞47
4.5 静态网格Actor48
4.5.1 放置静态网格Actor到关卡中48
4.5.2 移动性设置49
4.5.3 为一个静态网格Actor
改变网格引用49
4.5.4 在一个静态网格Actor上替换材质49
4.5.5 在一个静态网格Actor上编辑碰撞响应50
4.5.6 碰撞预设50
4.5.7 Collision Enabled51
4.5.8 Object Type51
4.5.9 碰撞响应标签52
4.6 小结52
4.7 问&答52
4.8 讨论52
4.8.1 提问53
4.8.2 回答53
4.9 练习53
第5章 使用光照和渲染54
5.1 学习光照术语54
5.2 理解光源类型55
5.2.1 添加点光源55
5.2.2 添加聚光源56
5.2.3 添加天空光源57
5.2.4 添加定向光源58
5.3 使用光源属性58
5.4 构建光照59
5.4.1 Swarm Agent59
5.4.2 移动性61
5.5 小结62
5.6 问&答62
5.7 讨论62
5.7.1 提问62
5.7.2 回答63
5.8 练习63
第6章 使用材质64
6.1 理解材质64
6.2 基于物理渲染65
6.3 材质输入类型65
6.3.1 基础颜色65
6.3.2 金属66
6.3.3 粗糙度66
6.3.4 法线66
6.4 创建贴图67
6.4.1 贴图尺寸67
6.4.2 2的幂68
6.4.3 贴图文件类型68
6.4.4 导入贴图69
6.5 创建一个材质69
6.5.1 输入和输出70
6.5.2 值节点71
6.5.3 材质实例72
6.6 小结74
6.7 问&答74
6.8 讨论75
6.8.1 提问75
6.8.2 回答75
6.9 练习76
第7章 使用音频系统元素77
7.1 介绍音频基础77
7.1.1 Audio Component77
7.1.2 导入音频文件78
7.2 使用音效Actor79
7.2.1 设置Attenuation80
7.2.2 使用Modulation属性81
7.2.3 创建Sound Cue81
7.2.4 高 级Sound Cue83
7.3 使用Audio Volume控制音效84
7.4 小结85
7.5 问&答85
7.6 讨论85
7.6.1 提问85
7.6.2 回答85
7.7 练习86
第8章 创建地貌和植被87
8.1 使用地貌87
8.1.1 地貌工具87
8.1.2 管理标签页88
8.1.3 高度图88
8.1.4 创建地貌88
8.1.5 地貌管理90
8.2 雕刻形状和体积90
8.2.1 工具菜单91
8.2.2 画刷菜单91
8.2.3 衰减菜单91
8.2.4 描画91
8.2.5 地貌材质92
8.3 使用植被94
8.4 小结96
8.5 问&答96
8.6 讨论96
8.6.1 提问97
8.6.2 回答97
8.7 练习97
第9章 游戏世界搭建98
9.1 搭建游戏世界99
9.1.1 环境叙事99
9.1.2 关卡的结构100
9.2 搭建游戏世界流程100
9.2.1 建立比例100
9.2.2 建立范围101
9.2.3 壳和阻挡102
9.2.4 放置道具和资源104
9.2.5 视觉复杂性和取景104
9.2.6 光照和音效107
9.2.7 试玩和完善109
9.3 小结111
9.4 问&答111
9.5 讨论112
9.5.1 提问112
9.5.2 回答112
9.6 练习112
* 10章 制作粒子效果114
10.1 理解粒子和数据类型114
10.2 使用Cascade编辑器115
10.2.1 使用发射器和模块116
10.2.2 使用曲线编辑器118
10.3 使用常见模块119
10.3.1 Required模块119
10.3.2 Spawn模块120
10.3.3 Lifetime模块121
10.3.4 Initial Size和Size By Life模块121
10.3.5 Initial Color, Scale Color/Life和Color Over Life模块121
10.3.6 Initial Velocity、Inherit Parent Velocity和Const Acceleration模块122
10.3.7 Initial Location和Sphere模块122
10.3.8 Initial Rotation和Rotation Rate模块123
10.4 为粒子设置材质123
10.5 触发粒子系统125
10.5.1 自动激活125
10.5.2 通过关卡蓝图激活粒子系统126
10.6 小结126
10.7 问&答126
10.8 讨论127
10.8.1 提问127
10.8.2 回答127
10.9 练习127
* 11章 使用Skeletal Mesh Actor128
11.1 定义Skeletal Mesh128
11.2 导入Skeletal Mesh131
11.3 学习Persona134
11.3.1 Skeleton模式134
11.3.2 Mesh模式135
11.3.3 Animation模式136
11.3.4 Graph模式138
11.4 使用Skeletal Mesh Actor139
11.5 小结141
11.6 问&答141
11.7 讨论141
11.7.1 提问141
11.7.2 回答142
11.8 练习142
* 12章 Matinee和影片143
12.1 Matinee Actor143
12.2 Matinee编辑器145
12.2.1 轨迹面板145
12.2.2 设置序列帧长度146
12.2.3 播放条146
12.2.4 Groups146
12.2.5 轨迹147
12.2.6 文件夹148
12.3 曲线编辑器149
12.4 使用其他轨迹151
12.5 在Matinee中使用摄像机152
12.5.1 Camera Group和Actor152
12.5.2 Director Group154
12.5.3 使用Matinee数据资源155
12.6 小结156
12.7 问&答156
12.8 讨论156
12.8.1 提问156
12.8.2 回答157
12.9 练习157
* 13章 学习使用物理系统158
13.1 在UE4中使用物理158
13.1.1 常见物理术语159
13.1.2 分配物理Game Mode给一个关卡159
13.1.3 项目设置和世界物理设置160
13.2 模拟物理161
13.3 使用物理材质162
13.3.1 创建一个物理材质资源163
13.3.2 分配一个物理材质给一个
Static Mesh Actor163
13.3.3 分配一个物理材质给一个材质164
13.4 使用约束165
13.4.1 附加Physics Actor165
13.4.2 Physics Constraint Actor166
13.5 Force Actor168
13.5.1 Physics Thruster Actor168
13.5.2 Radial Force Actor169
13.6 小结170
13.7 问&答170
13.8 讨论171
13.8.1 提问171
13.8.2 回答171
13.9 练习171
* 14章 介绍蓝图可视化脚本系统173
14.1 可视化脚本基础173
14.2 理解蓝图编辑器174
14.3 脚本中的基本概念178
14.3.1 事件178
14.3.2 函数180
14.3.3 变量181
14.3.4 运算符和条件184
14.3.5 脚本组织和注释185
14.4 小结186
14.5 问&答186
14.6 讨论186
14.6.1 提问186
14.6.2 回答187
14.7 练习187
* 15章 使用关卡蓝图189
15.1 Actor碰撞设置190
15.2 分配Actor给事件191
15.3 分配Actor给引用变量193
15.3.1 Actor组件193
15.3.2 获得和设置Actor的属性194
15.3.3 函数目标194
15.3.4 Activate属性196
15.3.5 Play Sound at Location函数197
15.3.6 使用物理Actor激活事件199
15.4 小结199
15.5 问&答200
15.6 讨论200
15.6.1 提问200
15.6.2 回答201
15.7 练习201
* 16章 使用蓝图类202
16.1 使用蓝图类202
16.2 蓝图编辑器界面204
16.3 使用组件205
16.3.1 添加组件205
16.3.2 Viewport面板205
16.3.3 编写组件蓝图脚本207
16.4 使用Timeline209
16.5 编写一个脉冲光源212
16.6 小结217
16.7 问&答217
16.8 讨论217
16.8.1 提问217
16.8.2 回答218
16.9 练习218
* 17章 使用可编辑变量和Construction Script219
17.1 设置219
17.2 可编辑变量219
17.3 使用Construction Script221
17.3.1 添加Static Mesh Component222
17.3.2 添加Static Mesh Component224
17.4 小结226
17.5 问&答227
17.6 讨论227
17.6.1 提问227
17.6.2 回答227
17.7 练习228
* 18章 制作按键输入事件和生成Actor229
18.1 为什么生成特别重要229
18.2 创建一个要生成的蓝图类230
18.2.1 使用Construction Script230
18.2.2 使用Expose on Spawn变量属性232
18.3 设置生成器蓝图232
18.4 从一个类生成一个Actor234
18.5 小结237
18.6 问&答237
18.7 讨论237
18.7.1 提问237
18.7.2 回答238
18.8 练习238
* 19章 制作一个遭遇战240
19.1 项目的Game Mode240
19.1.1 平视显示器241
19.1.2 游戏计时器和重生系统241
19.2 了解角色的能力241
19.3 使用蓝图类242
19.3.1 BP_Common文件夹243
19.3.2 BP_Turrets文件夹245
19.3.3 BP_Respawn文件夹245
19.3.4 BP_Pickup文件夹246
19.3.5 BP_Levers文件夹246
19.4 Actor和组件Tag247
19.5 小结247
19.6 问&答248
19.7 讨论248
19.7.1 提问248
19.7.2 回答248
19.8 练习248
* 20章 创建一个街机射击游戏:输入系统和Pawn250
20.1 通过设计总结确认需求251
20.2 创建一个游戏项目251
20.3 创建一个自定义Game Mode253
20.4 创建一个自定义Pawn和
Player Controller255
20.5 控制一个Pawn的移动257
20.5.1 禁用默认移动259
20.5.2 设置输入行为和按键绑定259
20.5.3 使用输入事件移动一个Pawn261
20.6 设置一个固定摄像机263
20.7 小结264
20.8 问&答264
20.9 讨论265
20.9.1 提问265
20.9.2 回答265
20.10 练习265
* 21章 创建一个街机射击游戏:障碍物和可拾取物品267
21.1 创建一个障碍物基类268
21.2 让你的障碍物移动270
21.3 伤害Pawn273
21.4 在死亡时重新开始游戏276
21.5 创建一个治疗可拾取物品278
21.6 创建一个Actor Spawner283
21.7 清理旧的障碍物287
21.8 小结287
21.9 问&答287
21.10 讨论288
21.10.1 提问288
21.10.2 回答289
21.11 练习289
* 22章 使用UMG290
22.1 创建一个控件蓝图290
22.2 浏览UMG界面291
22.2.1 Designer模式291
22.2.2 Graph模式292
22.2.3 设置分辨率293
22.2.4 锚点和DPI缩放294
22.3 创建一个开始菜单294
22.3.1 导入资源294
22.3.2 放置控件到画布上296
22.4 案例菜单系统302
22.5 小结303
22.6 问&答303
22.7 讨论303
22.7.1 提问304
22.7.2 回答304
22.8 练习304
* 23章 制作一个可执行文件305
23.1 烘焙内容305
23.2 为Windows平台打包一个项目306
23.3 对于安卓和iOS打包的资源309
23.4 访问高 级打包设置309
23.5 小结310
23.6 问&答311
23.7 讨论311
23.7.1 提问311
23.7.2 回答311
23.8 练习311
* 24章 使用移动设备313
24.1 为移动设备开发314
24.1.1 为移动设备预览314
24.1.2 为移动设备优化316
24.1.3 设置编辑器目标319
24.2 使用触摸控制320
24.2.1 虚拟摇杆321
24.2.2 Touch事件322
24.3 使用一个设备的运动数据324
24.4 小结326
24.5 问&答326
24.6 讨论327
24.6.1 提问327
24.6.2 回答327
24.7 练习328