导语

内容提要

本书通过3D游戏案例,讲解使用Unreal Engine 5进行游戏开发的技术要点。从搭建3D游戏世界、用Blueprint编写游戏程序、用User Interface Widget搭建玩家控制界面,到给游戏添加一个会动的主角、添加粒子特效、设置一个竞技对手,以及游戏制作完成后打包成独立游戏等,引导读者体验游戏开发实际全流程。本书适合游戏开发者,游戏设计相关专业的教师、学生,游戏相关培训机构人员,以及所有对3D游戏制作感兴趣的人士阅读。
作者简介
马殷雷,从业十年,参与制作了多款基于Unreal Engine(UE)的大型3D游戏,具有丰富的UE游戏开发、Blender建模以及Gimp图像处理经验。此外,通过Bilibili账号“殷雷Studio”发布的UE视频教程,观看人数已超百万,备受独立游戏开发者好评。
目录
第1章 初步了解Unreal Engine
1.1 看看Unreal Engine 5适合用来做什么
1.1.1 Unreal Engine 5的软件特色
1.1.2 学习Unreal Engine 5的准备
1.2 下载和安装Unreal Engine
1.2.1 使用官方客户端Epic Games Launcher
1.2.2 下载Unreal Engine 5的不同版本
1.2.3 修改保管库中下载资产的备份路径
1.3 新建游戏工程
1.3.1 使用适合自己的游戏模板
1.3.2 了解新建项目的默认设置
1.4 熟悉软件界面
1.4.1 顶部菜单栏
1.4.2 关卡窗口
1.4.3 主工具栏
1.4.4 内容浏览器
1.4.5 大纲放置Actors
1.4.6 细节面板场景设置
1.5 在关卡中改变视角和挪动Actor
1.5.1 编辑关卡时如何改变视角
1.5.2 移动、旋转和缩放Actor
第2章 像搭积木一样建造游戏世界
2.1 查看网格体模型
2.2 使用PBR材质“包装”网格体
2.3 进一步“美化”网格体的材质
2.3.1 改变材质颜色
2.3.2 调整纹理图的尺寸和位置
2.3.3 混合多种颜色来增加层次感
2.3.4 让材质在场景的不同位置产生变化
2.4 简化材质的编写与使用过程
2.4.1 将材质节点“打包”
2.4.2 将除了参数以外的整个材质“打包”
2.5 活用网格体的LOD优化场景
2.5.1 启用网格体LOD
2.5.2 启用Nanite网格体
2.6 用光照来点亮世界
2.6.1 灵活使用眼部适应功能
2.6.2 让太阳光照亮整个关卡
2.6.3 用天空光为暗处增加亮度
2.6.4 添加局部光源
2.6.5 为动态间接光照提供支持的Lumen系统
2.6.6 烘焙静态光源、固定光源的间接光照
2.6.7 使用Lumen计算场景中的反射
2.7 为游戏添加白云和蓝天
2.7.1 使用云和雾来增加场景的朦胧感
2.7.2 既是天空也是星球的大气层
2.8 为游戏添加山川和平原
2.8.1 在关卡中添加地形
2.8.2 雕刻地形
2.8.3 绘制地形材质
2.9 在陆地上添加大量植物
2.9.1 完成植物笔刷的设置
2.9.2 将植物绘制到网格体表面
第3章 绘制游戏的代码蓝图
3.1 在游戏开始后出现主角
3.1.1 新建一个主角蓝图
3.1.2 让主角蓝图在游戏开始后生效
3.2 给网格体添加物理碰撞
3.2.1 启用网格体的物理模拟
3.2.2 修改网格体的碰撞形态
3.2.3 自定义网格体的碰撞逻辑
3.3 在屏幕上显示“HelloWorld!”
3.3.1 游戏开始在屏幕上显示一行文字
3.3.2 游戏开始在屏幕上滚动显示文字
3.3.3 小球下落撞击地面后在屏幕上显示文字
3.3.4 按【Q】键在屏幕上显示文字
3.4 控制小球动起来
3.4.1 给小球增加一个前进的冲量
3.4.2 用Macro(宏)和自定义事件将节点“打包”
3.4.3 使用Timeline(时间轴)持续施加冲量
3.5 小球吃金币得分
3.5.1 放置一些会自动旋转的金币
3.5.2 用重叠事件判断金币触碰小球后让金币消失
3.5.3 累计分数与结束游戏
3.6 达到一定分数后进入下一关
3.6.1 在游戏中切换至新建的Level
3.6.2 保持游戏Level之间设置的一致性
3.6.3 存储关键信息并在下一关开始时读取
3.6.4 从多个出生点中选择一个进入下一关
3.7 编辑蓝图在关卡中设置机关
3.7.1 自动往复运动的踏板
3.7.2 用小球来启动踏板的移动
3.7.3 用EventDispatcher(事件分发器)改写火盆蓝图
3.7.4 用BlueprintInterface(蓝图接口)改写火盆蓝图
3.7.5 区别使用类型转换、事件分发器、蓝图接口
第4章 搭建玩家控制界面
4.1 制作一个显示当前得分的UI
4.1.1 新建一个控件蓝图
4.1.2 添加文本控件并调整其位置
4.1.3 把半成品的UI显示在屏幕上
4.1.4 修改文本控件的内容让其显示得分
4.1.5 美化文本控件的显示内容
4.2 在UI中显示游戏进行时间
4.2.1 把所有控件按一定的叠放顺序排列
4.2.2 编写一个计时器来显示当前用时
4.2.3 让进度条调用时间变量
4.3 制作保存和读取游戏进度的界面
4.3.1 做一个保存和读取的UI
4.3.2 在UI弹出时添加一个淡入动画
4.3.3 完善UI的鼠标单击交互功能
4.3.4 保存和读取分数
4.4 制作游戏开始界面
4.4.1 把空白关卡当作开始界面的“载体”
4.4.2 在正式关卡用镜头切换插入开始界面
第5章 对人形主角使用骨骼动画
5.1 为普通网格体添加骨骼
5.1.1 将静态网格体转化为骨骼网格体
5.1.2 为骨骼网格体添加骨骼
5.2 将骨骼绑定至身体
5.2.1 自动生成绑定权重
5.2.2 手动修改权重
5.2.3 加载引擎内置人物作为参考
5.3 让小白人取代小球在游戏中动起来
5.3.1 用Character类型蓝图加载骨骼网格体
5.3.2 用增强输入系统接收玩家的行走指令
5.3.3 编写行走事件的逻辑
5.4 调整与优化人物前进时的视角
5.4.1 让人物转身时及时调整前进方向
5.4.2 用鼠标实时调整水平视角
5.5 生成人物行走和跑动时的动画
5.5.1 建立源骨骼和目标骨骼的IK绑定与重定向器
5.5.2 设置重定向映射
5.5.3 添加关键帧微调动画序列
5.6 用动画蓝图控制人物的常驻动画
5.6.1 在混合空间中将动画和速度相关联
5.6.2 在动画蓝图中实时获取速度
5.6.3 在动画蓝图中设置不同动画的混合逻辑
5.6.4 用状态机设置更复杂的动画切换
5.7 用动画蒙太奇触发非常驻动作
5.7.1 将动画序列转化为动画蒙太奇
5.7.2 在小白人蓝图中调用动画蒙太奇
5.7.3 用Notify(通知)在蒙太奇中标示出事件发生的时间点
5.8 用控制绑定制作一段动画
5.8.1 创建骨骼的FK控制器
5.8.2 创建骨骼的IK控制器
5.8.3 用创建好的控制绑定编辑一段动画
第6章 添加炫目的粒子效果
6.1 在关卡中使用粒子效果
6.1.1 了解哪些是粒子效果
6.1.2 在游戏中实时生成粒子效果
6.2 用Niagara做火焰效果
6.2.1 新建一个Niagara资产
6.2.2 借用翻页动画做出火焰材质
6.2.3 给火焰添加颜色
6.3 设置更多模块来丰富火焰效果
6.3.1 生成更多粒子
6.3.2 让火焰飞舞得更猛烈
6.3.3 添加烟雾发射器
6.4 用Niagara做落叶效果
6.4.1 区别使用CPU模拟和GPU模拟
6.4.2 启用网格体渲染器
6.4.3 调整参数让落叶飘落得更真实
6.5 在扔出去的白球身后添加拖尾效果
6.5.1 把丝带绑定在白球身后
6.5.2 编辑拖尾的材质
6.5.3 调整拖尾的粒子效果参数
6.6 通过设置用户参数灵活控制粒子效果
6.6.1 调整扔出去的光球的方向和速度
6.6.2 给扔出的光球设置一个追踪对象
第7章 设置NPC的行动逻辑
7.1 制作一个跟随主角的AI机械球
7.1.1 在主角身边生成机械球
7.1.2 设置AI机械球的跟随路径
7.1.3 调整和优化跟随路径
7.1.4 使用半动态导航实时修改局部路面
7.1.5 使用全动态路径引导超大地图中的AI
7.1.6 让AI机械球可以跳过间隔
7.2 赋予AI机械球攻击技能
7.2.1 用行为树和黑板强化AI控制器
7.2.2 自定义机械球攻击敌人的行为树任务
7.2.3 给行为树的分支增加执行条件
7.3 赋予AI机械球搜索敌人的功能
7.3.1 启用AI的听觉感知功能
7.3.2 实现NPC通过听觉刺激触发被AI攻击
7.3.3 监测AI在游戏运行时的状态
7.4 用EQS设置敌人NPC的复杂行动
7.4.1 新建一个EQS并开启调试
7.4.2 添加游戏运行中会实时改变的测试
7.4.3 启用设置完成的EQS
7.5 打包完成的游戏
7.5.1 游戏打包的基本设置
7.5.2 打包失败时的解决方法