Unreal Engine 5 C++ Advanced Action RPG 十章笔记

第十章 Survival Game Mode

2-Game Mode Test Map

  • 设置游戏规则进行游戏玩法
    • 生成敌人
    • 玩家是否死亡
    • 敌人死亡
    • 是否需要刷出更多
      • 肯定:难度增加
      • 否定:玩家胜利
        在这里插入图片描述
  • 流程
    • 新的游戏模式类
    • 游戏状态
    • 新的数据表来指定总共有多少波敌人
    • 生成逻辑
    • UI告诉当前玩家的敌人波数
      在这里插入图片描述

3-Survival Game Mode Class

  • 新建继承一开始的游戏规则基类新的游戏规则
    在这里插入图片描述
    在这里插入图片描述
  • 创建这个游戏模式的蓝图
    在这里插入图片描述

4-Enemy Wave Spawner Table Row

  • 继续定义逻辑,定义每波数敌人的信息
    在这里插入图片描述
  • 定义波次生成表格行结构体
    在这里插入图片描述
    在这里插入图片描述
  • 创建我们定义的这个数据表格
    在这里插入图片描述
  • 将这个每波生成敌人的信息数据添加到游戏模式中
    在这里插入图片描述

5-Wave Progression Logic(生成波数逻辑)

  • 生成敌人规则的逻辑所需的变量与逻辑
    在这里插入图片描述
    在这里插入图片描述

6-Wave Count Down Widget

  • 修改上面的两个不严谨的地方
  • 添加宏可以在蓝图中查看
    在这里插入图片描述
  • 这里应该直接大于就行了,不应该有等于
    在这里插入图片描述
  • 这节课做开始产生新的波数的UI
    在这里插入图片描述
    在这里插入图片描述

7-Drawing Wave Count Down Widget

  • 在GameMode中新建一个函数用来创建显示UI
    在这里插入图片描述
  • 显示UI
    在这里插入图片描述
  • 更新速度很快,导致倒计时,到0时可能出现负数情况bug,解决方法
    在这里插入图片描述

8-Wave Info Widget

  • 继续做UI
    在这里插入图片描述
    在这里插入图片描述
  • 继续创建新的函数用来显示生成新的一波UI
    在这里插入图片描述
    在这里插入图片描述
  • 播放完第一个UI后,应该播放第二个UI,但是没有播放,原因是我们游戏模式默认没有启用Tick,要自动启动Tick
    在这里插入图片描述
    在这里插入图片描述

9-Pre Load Next Wave Enemies(预加载下一波敌人)

  • 这节课来处理生成敌人逻辑
    • 由于我们在结构内部使用软指针,这意味着我们需要手动加载敌人类,并且这样做的时机至关重要,因为我们不知道有多少个类指针,如果我们在生成时就开始异步加载就太晚了,所以我们需要预加载敌人,所以我们的异步加载需要在生成之前
    • 在关卡中生成敌人
    • 处理生成计数
      在这里插入图片描述
  • 新建一个预加载敌人的函数与一个获取生成数据表格数据的辅助函数
    在这里插入图片描述
  • 以及存储预加载敌人的Map
    在这里插入图片描述
    在这里插入图片描述
  • 调用预加载敌人函数位置
    在这里插入图片描述
    在这里插入图片描述
  • 测试结果
    在这里插入图片描述
    在这里插入图片描述

10-Try Spawn Wave Enemies

  • 继续写生成敌人的逻辑,新建尝试生成敌人的函数与是否持续生成敌人的辅助函数
    在这里插入图片描述
  • 新建所需计数的变量
    在这里插入图片描述
  • 生成逻辑
    在这里插入图片描述
  • 在之前未做处理的生成敌人的位置调用此函数
    在这里插入图片描述

11-On Enemy Destroyed

  • 先解决之前遗漏的一些小细节,每次预加载敌人应该清空一下存储的Map
    在这里插入图片描述
  • 这节课来解决上节课,当杀死敌人后,不会产生新的敌人
  • 为了不断生成敌人,游戏模式需要知道敌人何时死亡
  • 绑定Actor的当销毁时的委托事件进行处理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

12-On Wave Completed

  • 当完成一波等待是否有下一波,如果没有就结束打印一下测试
    在这里插入图片描述
  • 添加一波
    在这里插入图片描述

13-Playtesting Game Mode(测试游戏模式)

  • 这节课修改了一下远程敌人入场的bug,远程敌人入场就会攻击,没有播放进场动画,原因就是因为行为树开始就执行攻击能力了,我们应该把停止所有逻辑的中止器改为LowerPriority
    在这里插入图片描述

14-Register Spawned Enemies

  • 这节课解决,Boss召唤小弟后,Boss死亡,小弟还未死亡时,UI还是会进入这波结束的状态,这是因为我们的游戏规则对Boss召唤的敌人一无所知导致的
  • 注册生成的敌人
    在这里插入图片描述
    在这里插入图片描述
  • 在Boss的召唤小弟能力中进行调用此函数
    在这里插入图片描述

15-Notify Last Wave

  • 解决一下细节问题,Boss出现时的血条与名字UI会提前出现与我们的波数UI进行相重叠
  • 因为这两个动画播放时间有2.35秒
    在这里插入图片描述
  • 但是我们生成敌人的延迟时间只有2秒
    在这里插入图片描述
  • 解决方法很多,这里缩短一下动画时间就行
    在这里插入图片描述
  • 这节课来解决,当玩家到最后一波时,在屏幕上显示该信息
  • 修改一下敌人生成的延迟时间为蓝图中可写
    在这里插入图片描述
  • 最后一波的显示UI
    在这里插入图片描述
  • 到这里游戏规则的有效游戏循环基本都处理了,唯一的就是角色的死亡还没有做处理
    在这里插入图片描述

16-On Player Died

  • 在玩家死亡能力中,结束死亡能力时调用游戏状态改变的委托
    在这里插入图片描述
  • 测试
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述

17-Game Difficulty

  • 这节课来实现游戏的难度设置
  • 到目前位置我们的游戏能力等级都默认为1,这节课来处理根据游戏难度来设置游戏能力的等级
  • 首先新建难度的枚举类型
    在这里插入图片描述
  • 在游戏规则的基类中定义这个变量,并且提供公有接口获取
    在这里插入图片描述
  • 在角色类中初始化能力数据时进行传递当前难度的决定能力等级逻辑
    在这里插入图片描述
  • 在敌人初始化能力中就将难度的等级设置与角色相反
    在这里插入图片描述
    在这里插入图片描述

18-Verify Game Difficulty

  • 验证游戏难度

19-Section Wrap Up

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值