虚幻引擎的蓝图可视化脚本系统可以让设计师非常便捷地为游戏编写脚本,同时允许程序员创建可由设计师扩展的基本元素。在这本书中,我们将探索蓝图编辑器的所有功能,并了解相关的专家提示、快捷方式和最佳实践。
本书将指导我们使用变量、宏和函数,并帮助我们学习面向对象编程(OOP)。我们将了解
游戏框架,并深入学习如何通过蓝图通信使一个蓝图访问另一个蓝图的信息。后面的章节将重点介绍如何一步一步地构建一个功能齐全的游戏。我们将从一个基本的第一人称射击游戏模板开始,每一章都以此为基础,创建出越来越复杂和强大的游戏体验。然后,我们将从创建基本的射击机制发展到更复杂的系统,如用户界面元素和智能敌人行为等。本书演示了如何使用数组、映射、枚举和向量运算,并介绍了虚拟现实游戏开发所需的元素。在最后的章节中,我们将学习如何实现过程生成和创建产品配置器。
在本书的结尾,我们将学会如何构建一款功能完备的游戏,并具备为用户开发有趣体验所需的技能。
游戏状态和收尾工作
在本章中,我们将进行最后的操作,将游戏发展成一个完整的、有趣的并能对玩家造成一定挑战的体验。首先,我们将引入玩家死亡机制,当玩家的生命值完全耗尽时激活该机制。然后,引入一个回合系统,通过要求玩家在每个回合中击败越来越多的敌人,来提高玩家的挑战。最后,我们还将引入一个保存和加载的系统,以便玩家可以离开当前游戏并返回上一回合。
在本章中,我们将介绍以下内容:
根据玩家情况显示不同的菜单
使用调节器控制游戏的难度
支持保存正在进行的游戏状态,并在以后重新加载
基于保存的数据进行分支关卡初始化
创建显示游戏数据的过渡屏幕
在本章结束时,我们将推出一款具有街机风格的第一人称射击游戏,玩家可
以不断地回到游戏中去面对越来越困难的挑战。
11-1引入玩家死亡机制
11.1.1 设计游戏失败时显示的信息
当玩家的生命值耗尽时,将在屏幕上显示失败的信息,然后显示重新开始上一轮比赛或退出
比赛的选项。我们借鉴之前创建的胜利界面的方法,制作出类似的选项。我们可以使用WinMenu资产作为模板来提高效率,而不是从头开始重新制作UI界面。我们可以按照以下步骤创建LoseMenu。
(1)在内容浏览器中访问“内容/FirstPerson/UI”文件夹。在WinMenu上右击,并在快捷菜单中选择“复制”命令。
(2)然后将复制的控件蓝图命名为LoseMenu,如图11-1所示。
(3)双击LoseMenu资产,打开UMG编辑器。选择显示“You Win!”文本对象。在“细
节”面板中,将文本元素重命名为Lose msg,将“内容”类别下的“文本”字段更改为“You
Lose!”,并将“颜色和不透明度”更改为暗红色,如图11-2所示。
第1部分 蓝图的基本知识
第1章 探索蓝图编辑器
1-1 安装虚幻引擎
1-2 创建新项目和使用模板
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 “ 视口”选项卡
1.4.6 “ 事件图表”选项卡
1-5 在蓝图中添加组件
1-6 本章总结
1-7 测试
第2章 使用蓝图编程
2-1 使用变量存储数值
2-2 使用事件和动作定义蓝图的行为
2.2.1 事件
2.2.2 动作
2.2.3 执行路径
2-3 使用运算符创建表达式
2.3.1 算术运算符
2.3.2 关系运算符
2.3.3 逻辑运算符
2-4 用宏和函数组织编程
2.4.1 创建宏
2.4.2 创建函数
2.4.3 分步示例
2.4.4 宏、函数和事件
2-5 本章总结
2-6 测试
第3章 面向对象编程和游戏框架
3-1 熟悉面向对象编程(OOP)
3.1.1 类
3.1.2 实例
3.1.3 继承
3-2 管理Actor类
3.2.1 引用Actor
3.2.2 催生和毁灭Actor
3-3 构造脚本
3-4 探索其他游戏框架类
3.4.1 Pawn类
3.4.2 Character类
3.4.3 玩家控制器
3.4.4 游戏模式基础
3.4.5 游戏实例
3-5 本章总结
3-6 测试
第4章 理解蓝图通信
4-1 直接蓝图通信
4-2 蓝图的继承
4-3 关卡蓝图通信
4-4 事件分发器
4-5 绑定事件
4-6 本章总结
4-7 测试
第2部分 开发游戏
第5章 与蓝图的对象交互
5-1 创建项目和第一个关卡
5-2 在关卡中添加对象
5-3 探索材质
5.3.1 创建材质
5.3.2 材质的属性和节点
5.3.3 为材质添加属性
5-4 创建目标蓝图
5.4.1 检测命中
5.4.2 交换材质
5.4.3 升级蓝图
5-5 让目标圆柱体移动
5.5.1 改变角色的移动和碰撞
5.5.2 分解目标
5.5.3 准备计算方向
5.5.4 使用Delta Seconds获取相对速度
5.5.5 更新位置
5-6 周期性改变目标的方向
5-7 本章总结
5-8 测试
第6章 增强玩家能力
6-1 添加运动功能
6.1.1 分解角色动作
6.1.2 自定义控制输入
6.1.3 添加冲刺功
6-2 设置缩放视图的效果
6-3 增加子弹的速度
6-4 添加声音和粒子效果
6.4.1 用分支改变目标状态
6.4.2 触发声音效果、爆炸和摧毁
6-5 本章总结
6-6 测试
第7章 创建屏幕UI元素
7-1 使用UMG创建简单的UI
7.1.1 使用控件蓝图绘制形状
7.1.2 自定义仪表的外观
7.1.3 创建弹药和目标摧毁计数
7.1.4 显示HUD
7-2 将UI值连接到玩家变量
7.2.1 为生命值和耐力创建绑定
7.2.2 为弹药和目标消除计数器创建文本绑定
7-3 获取子弹和摧毁目标的信息
7.3.1 减少子弹计数
7.3.2 增加摧毁目标的计数
7-4 本章总结
7-5 测试
第8章 创造约束和游戏目标
8-1 限制玩家的行为
8.1.1 消耗和恢复体力
8.1.2 弹药耗尽时禁止开火
8-2 创建可收集物品
8-3 设置游戏获胜条件
8.3.1 在HUD中显示目标
8.3.2 创建获胜菜单屏幕
8.3.3 显示WinMenu
8.3.4 触发胜利
8-4 本章总结
8-5 测试
第3部分 增强游戏
第9章 用人工智能构建智能敌人
9-1 设置敌方角色的导航
9.1.1 从虚幻商城导入资源
9.1.2 扩展游戏区域
9.1.3 使用NavMesh制作导航
9.1.4 创建AI资产
9.1.5 设置BP_EnemyCharacter蓝图
9-2 创建导航行为
9.2.1 设置巡逻点
9.2.2 创建黑板键
9.2.3 创建BP_EnemyCharacter中的变量
9.2.4 更新当前巡逻键
9.2.5 重叠巡逻点
9.2.6 在AI控制器中运行行为树
9.2.7 让AI通过行为树学会行走
9.2.8 选择BP_EnemyCharacter实例中的巡逻点
9-3 让智能敌人追逐玩家 164
9.3.1 赋予敌人视觉感知能力
9.3.2 创建行为树任务
9.3.3 向行为树添加条件
9.3.4 创造追逐行为
9-4 本章总结
9-5 测试
第10章 升级AI敌人
10-1 创建敌人的攻击功能
10.1.1 创建攻击任务
10.1.2 使用行为树中的攻击任务
10.1.3 更新生命值
10-2 让敌人听到声音并识别位置
10.2.1 将听觉添加到行为树
10.2.2 设置调查任务
10.2.3 创建变量和宏来更新黑板.
10.2.4 解释和存储噪声事件数据
10.2.5 为玩家的动作添加噪声
10-3 摧毁敌人
10-4 在游戏过程中生成更多的敌人
10-5 创建敌人的巡逻行为
10.5.1 使用自定义任务识别巡逻点
10.5.2 在行为树中添加巡逻状态
10.5.3 最后的调整和测试
10-6 本章总结
10-7 测试
第11章 游戏状态和收尾工作
11-1 引入玩家死亡机制
11.1.1 设计游戏失败时显示的信息
11.1.2 显示失败时的屏幕
11-2 使用保存的游戏创建回合机制 196
11.2.1 使用SaveGame类存储游戏信息
11.2.2 保存游戏信息
11.2.3 加载游戏信息
11.2.4 增加目标
11.2.5 创建在回合之间显示的过渡画面
11.2.6 当前回合获胜时过渡到新回合
11-3 暂停游戏并重置保存文件
11.3.1 创建暂停菜单
11.3.2 恢复游戏
11.3.3 重置保存文件
11.3.4 触发暂停菜单
11-4 本章总结
11-5 测试
第12章 构建和发行
12-1 优化图形设置
12-2 与他人共享游戏
12-3 打包游戏
12-4 构建配置和打包设置
12-5 本章总结
12-6 测试
第4部分 高级蓝图
第13章 数据结构和流控制
13-1 探索不同类型的容器
13.1.1 数组
13.1.2 数组示例–创建BP_RandomShawer蓝图
13.1.3 测试BP_RandomSpawner
13-2 集
13-3 映射
13-4 探索其他数据结构
13.4.1 枚举
13.4.2 结构
13.4.3 数据表格
13-5 流控制节点
13.5.1 Switch节点
13.5.2 触发器
13.5.3 Sequence节点
13.5.4 For Each Loop节点
13.5.5 Do Once节点
13.5.6 Do N
13.5.7 Gate节点
13.5.8 MultiGate节点
13-6 本章总结
13-7 测试
第14章 检测节点
14-1 世界变换和相对变换 243
14-2 点和向量 245
14.2.1 向量的表示
14.2.2 向量的运算
14-3 检测和检测功能
14.3.1 对象检测
14.3.2 检测通道
14.3.3 形状检测
14.3.4 调试线
14.3.5 向量和检测节点示例
14-4 本章总结
14-5 测试
第15章 蓝图技巧
15-1 蓝图编辑器的快捷方式
15-2 蓝图的最佳实践
15.2.1 蓝图职责
15.2.2 管理蓝图的复杂性
15-3 使用其他蓝图节点
15.3.1 Select节点
15.3.2 Teleport节点
15.3.3 Format Text节点
15.3.4 Math Expression节点
15.3.5 Set View Target with Blend节点
15.3.6 AttachActorToComponent节点
15.3.7 Enable Input和Disable Input节点
15.3.8 Set Input Mode的节点
15-4 本章总结
15-5 测试
第16章 虚拟现实开发
16-1 探索虚拟现实模板
16-2 VRPawn蓝图
16-3 传送
16-4 抓取对象
16-5 蓝图使用接口进行通信
16-6 与菜单交互
16-7 本章总结
16-8 测试
第5部分 其他有用的工具
第17章 动画蓝图
17-1 动画概述
17.1.1 动画编辑器
17.1.2 骨骼和骨骼网格体
17.1.3 动画序列
17.1.4 混合空间
17-2 创建动画蓝图
17.2.1 事件图表
17.2.2 AnimGraph
17-3 探索状态机
17-4 导入动画初学者内容包
17-5 添加动画状态
17.5.1 修改角色蓝图
17.5.2 修改动画蓝图
17.5.3 定义过渡规则
17-6 本章总结
17-7 测试
第18章 创建蓝图库和组件
18-1 蓝图宏和函数库
18.1.1 蓝图函数库示例
18.1.2 创建第3个函数并进行测试
18-2 创建Actor组件
18-3 创建场景组件
18-4 本章总结
18-5 测试
第19章 程序化生成
19-1 使用构造脚本进行程序化生成
19-2 创建蓝图样条曲线
19-3 编辑器工具蓝图
19-4 本章总结
19-5 测试
第20章 使用变体管理器创建产品配置器
20-1 产品配置器模板
20-2 变量管理器和变体集
20-3 BP_Configurator蓝图
20-4 UMG控件蓝图
20-5 本章总结
20-6 测试
20-7 后记