调整“攻击判定”和“碰撞判定”。
调整过大的 HitCollision 尺寸。此外,由于本次风格不需要主体的攻击判定,可以大胆将其删除。(如果使用近战攻击则需保留,但本次不制作近战攻击。)
-
选择 HitCollision。
-
拖动四角,将其调整为比墙壁判定稍大一点的程度。
-
右键点击 AttackArea2D。
-
在菜单底部找到“删除”选项并执行“删除”。
- 当弹出“是否删除 AttackArea2D 及其子节点?”的窗口时,点击“确定”,即可删除 AttackArea2D 及其子节点 AttackCollision。
创建“受击”脚本
当“受到敌人攻击”时,应转移到“受击”状态。在“受击”状态下,角色应暂时无法移动,并向后移动(即与显示方向相反的方向)。问题在于应从哪个状态进行转移。Player 已有 7 个状态,若要将所有状态都链接起来会非常繁琐。此时可以使用“AnyState”框。
什么是“AnyState”?
顾名思义,AnyState 代表“所有”状态。从该状态出发的链接,无论原始状态为何,只要满足条件即可进行转移。此外,通过执行专用的执行动作“返回上一状态”,可以忽略链接直接返回到转移前的状态。
像本次的“受击”这类动作,使用 AnyState 是最合适的。
创建“受击”状态
在“受击”状态中,应设置为“无法移动”、“向后(与显示方向相反)移动”、“经过一定时间后”、“返回上一状态”。
- 在 AnyState 右侧的空间右键点击,选择“添加状态”。
- 将创建的状态 001 重命名为“受击”。
- 在动画类别名称中指定“受击”。
- 展开检查器中的“动作设置”。
- 开启“不接受移动中的移动输入”和“不接受移动中的显示方向变更”。这样,在受击反应期间将无法移动,显示方向也不会改变。
- 选择“+添加执行动作”。
- 选择“向显示方向移动”。
- 启用选项“向反方向移动”,然后点击“添加”。
- 再次选择“+添加执行动作”。
- 这次选择“添加等待”动作。
- 将“数值”选项设置为 0.2 秒,然后点击“添加”。由于无法使用全角字符正确输入,请使用半角字符输入 0.2。这样,在下一个执行动作之前会有 0.2 秒的等待,即“向显示方向相反方向移动”将持续 0.2 秒。
- 再次选择“+添加执行动作”。
- 最后选择“返回上一状态”动作并点击“添加”。
- 如果执行动作按如下顺序排列,则设置完成。
用链接连接“AnyState”和“受击”
从 AnyState 出发的链接也可以像普通链接一样创建。
- 右键点击 AnyState,选择“添加链接”。
- 将其连接到“受击”状态。
- 在检查器中点击“+添加其他条件”。
- 选择“接触物体攻击判定”动作。
- 勾选“检查所有方向”并添加。
- 这样,无论从哪个方向受到攻击,都会转移到“受击”状态。
进行测试游玩
请进行测试游玩,确认是否能正确执行受击反应,并与敌人碰撞。如果设置正确,当与敌人碰撞时,角色将无法操作,闪烁并向后移动一小段距离。
无法正常工作时的检查清单
不闪烁:请重新检查 BaseSettings 中的无敌设置。
未发生受击反应:请检查链接条件。
发生了反应但动作异常:请检查受击状态的内容。
第三章回顾
那么,本次我们完成了以下学习:
- 通过创建各种类型的游戏对象,进行对象制作的反复练习
- 碰撞层与碰撞掩码的概念
- 受到伤害与无敌状态
- AnyState 的处理方法
但是,虽然已经实现了攻击和伤害的处理,但画面狭窄,没有声音,也不会出现游戏结束。
这还不能称之为游戏,因此在第四章中,我们将使其能够作为游戏正常运行。