教程:“从零开始使用ACTION GAME MAKER” – 第3章

调整攻击和命中碰撞

首先,让我们调整 HitCollision 的大小,因为它目前太大了。
此外,由于我们使用的是 洛克人风格系统,玩家角色本身不需要攻击命中框。(如果我们正在制作近战攻击,我们会保留它,但本教程中我们将不添加近战战斗。)
因此,我们将直接 完全移除 AttackArea2D

  1. 选择 HitCollision

  2. 拖动其角点调整大小,使其仅略大于墙壁碰撞框。

  3. 右键点击 AttackArea2D

  4. 在菜单底部,选择 删除

  5. 将弹出一个确认窗口,询问是否要删除 AttackArea2D 及其子节点 AttackCollision。点击 确定 以移除它们。

创建“受到伤害”脚本

当玩家受到敌人攻击时,应过渡到**“受到伤害”**状态。
在此状态下,玩家将在短时间内无法移动,被轻微击退(与其面朝方向相反),然后在短暂延迟后返回之前的状态。

问题是:应从哪些状态进行此过渡?
由于玩家已有七个状态,为每个状态创建链接将非常繁琐。
这时AnyState框就派上用场了。

什么是 AnyState?

顾名思义,AnyState 意为“来自任何状态”。
从 AnyState 创建的链接,只要满足其条件,无论当前状态如何,都会进行过渡。
此外,还有一个特殊的执行操作称为**“TransferToAction”**,它允许您忽略普通链接,直接返回到过渡前的状态。

这使得 AnyState 成为处理如受到伤害等反应的理想选择。


创建“受到伤害”状态

在“受到伤害”状态中,我们将配置以下内容:

  • 禁用移动。
  • 无法改变面朝方向。
  • 玩家向后移动(与面朝方向相反)。
  • 0.2 秒后,返回之前的状态。
  1. 右键点击 AnyState 右侧的空间,选择 添加状态
  2. 将新 State001 重命名为 Take Damage(受到伤害)。
  3. 选择动画 字段中,选择 DamageTaken
  4. 在检查器中展开 操作设置
  5. 启用 “忽略输入”“忽略面朝方向更改”
    • 这确保玩家在受到伤害反应期间无法移动或转向。
  6. 点击 + 添加可执行操作
  7. 选择 MoveInDisplayDirection
  8. 启用 相反方向 选项,然后点击 添加
  9. 再次点击 + 添加可执行操作
  10. 选择 Wait(等待)。
  11. 字段设置为 0.2 秒(请务必使用半角数字输入)。
  12. 再次点击 + 添加可执行操作
  13. 选择 TransferToAction 并点击 添加
  14. 如果操作按上述顺序排列,则“受到伤害”状态即完成。

将 AnyState 链接到“受到伤害”

从 AnyState 创建链接的方式与其他状态相同。

  1. 右键点击 AnyState 并选择 添加链接
  2. 将其连接到 Take Damage(受到伤害)状态。
  3. 在检查器中,点击 + 添加条件
  4. 选择 ContactWithAttackArea
  5. 启用 选择所有侧面,然后点击 添加
  6. 现在,无论玩家从哪个方向与敌人的攻击碰撞箱发生碰撞,都将过渡到“受到伤害”状态。

测试设置

运行测试播放以验证伤害反应是否正常工作。
当与敌人碰撞时,玩家应:

  • 暂时无法控制。
  • 闪烁(由于无敌设置)。
  • 被轻微击退。

故障排除检查清单

  • 不闪烁 → 检查 BaseSettings 中的无敌设置。
  • 无伤害反应 → 确认链接条件设置正确。
  • 反应发生但行为不正确 → 重新检查 Take Damage 状态的内容。

第3章回顾

在本章中,我们学习了以下内容:

  • 通过创建各种类型的游戏对象,反复练习对象创建

  • 碰撞层碰撞掩码的概念

  • 受到伤害无敌状态

  • 如何使用AnyState

然而,尽管我们现在拥有了可用的攻击和伤害系统,游戏仍存在一些不足:屏幕感觉太小、没有声音,也没有游戏结束机制。

目前来看,它还不太像一个完整的游戏。
第4章中,我们将致力于使其作为一个真正的游戏正常运行。

1 个赞