教程:脚本课程#2 尝试制作敌人。

在本课程中,您将学习使用 ACTION GAME MAKER 进行基本脚本编写的方法。
第二回将制作敌人。

课程开始前的准备工作

我们将继续使用第一回中使用的工程文件。
现在请打开工程文件并做好准备。

步骤1:设置敌人(僵尸)的基本参数。

  1. 敌人将使用模板对象中的僵尸。打开新标签页,选择游戏对象,并按如下方式设置以创建:
    名称:任意,此处设为 Sample_Zombie。
    模板:characters
    类型:Enemy_Zombie
    组:Enemy
    创建后请按 Ctrl+S 保存。

  2. 进行基本设置。打开 BaseSettings 并按如下方式设置:
    左右翻转模式 (Enable Auto H Flip): 开启 在视觉脚本中,右侧被识别为朝向方向。但由于该对象是朝左创建的,因此需要开启左右翻转模式。
    动作启动条件 (Enable Object Condition): 接近相机 (CLOSE TO CAMERA) *在相机范围外将无效化且不会动作。
    HP: 5,MaxHP: 5 HP 为 1 时太少,因此设为 5。
    无敌时间 (InvincibilityDuration): 0.2 秒 *受到攻击时的无敌时间。1 秒太短,因此设为 0.2 秒。

  3. 原本需要设置各种碰撞检测和动画等,但由于模板对象已预先设置,因此基本设置仅此而已。

说明

关于无敌时间
无敌时间非常重要。如果不设置无敌时间,在攻击判定消失前会无限次命中。另一方面,如果无敌时间过长,则会出现像机枪那样的连续攻击无法命中的情况。请根据您的项目调整到最合适的设置。

步骤2:编写敌人(僵尸)的脚本

  1. 选择 :scroll: + 图标,创建一个新的视觉脚本。

  2. 将第一个状态重命名为 Walk,并将动画设置为步行动画 E_01_act_003。同时,将显示方向设置为左。这是为了避免在未设置时默认向右放置。

  3. 将模板移动 (TemplateMove) 设置为 Walk 的执行动作。模板类型可以保持为水平方向,但请禁用折返功能。这样将仅禁用基于时间的折返,使僵尸在碰到墙壁之前不会反转方向。

  4. 尝试将其放置在游戏场景中。将 sample_zombie.tscn 作为 BaseLayer 的子对象放置。

  5. 进行测试运行。如果僵尸以向左的步行动作移动,并且被子弹击中后消失,则成功。如果运行不正常,请参考以下检查项:
    僵尸向相反方向移动:请检查基本设置中的左右反转模式是否已启用,以及 Walk 状态的显示方向是否设置为向左。
    子弹击中僵尸后未消失:子弹脚本可能存在问题。请确认对象的碰撞检测和接触设置是否正常。
    另外,即使多次击中僵尸也不会死亡是正常的,因为尚未设置死亡状态。

  6. 接下来,为僵尸添加受伤状态。在 AnyState 附近创建一个新的状态 Damaged。将动画设置为受伤动画 E_01_act_008。

  7. 接着,在动作设置中将水平移动速度设置为 10%。这样僵尸在受伤动作期间移动速度会变慢。

  8. 添加三个动作。第一个是播放声音 (PlayAudio)。将 AudioData 设置为 Zombie2。

  9. 第二个是等待。为此执行动作添加 0.2 秒的等待时间。这是为了预留动画播放的时间。

  10. 第三个是返回到之前的动作 (TransferToAction)。由于没有特殊设置,直接添加即可。

  11. 现在,僵尸会发出呻吟声,并在 0.2 秒后返回到之前的状态。关于之前的状态,将在下一步中说明。

  12. 将 AnyState 链接到 Damaged。AnyState 顾名思义代表所有状态。也就是说,无论处于哪个状态,只要满足条件,就会通过此链接转移到 Damaged。“返回到之前的状态 (TransferToAction)”是专用于 AnyState 的功能,可以返回到“转移前的状态”。如果您有 RPG Maker 的经验,可能会对这个名称更熟悉。此外,对于像本次僵尸这样的小型脚本,可以直接连接而不使用 AnyState,但由于需要从具有许多状态的对象全部连接链接,这非常困难,因此本教程采用这种方式。

  13. 为链接添加两个条件。第一个是接触攻击判定 (ContactWithAttackArea)。设置为从所有方向受到来自玩家攻击时触发。

  14. 第二个条件是 HP=0,请按以下方式设置:
    目标:此节点
    反转条件 (Is Reversed):开启 *顾名思义,这将反转条件。即表示 HP 不为 0 的情况。
    与前一个条件的逻辑关系 (Connection With Previous Condition):AND *此处保持为 AND。因为我们希望在受到伤害 HP 不为 0 时进行转移。

  15. 好了,现在受伤设置已完成,请测试其功能。如果设置正确,受到伤害时会发出呻吟声并后仰,但在受到 5 次伤害后应不再后仰。如果运行不正常,请检查以下内容:
    未执行受伤动作:请确认链接是否正确,特别是 HP=0 是否已正确设置为反转。同时,请确认 Damaged 状态是否已正确设置动画。
    无论击中多少次都执行受伤动作:请确认链接的逻辑条件是否为 AND

  16. 最后,创建死亡动作。创建一个新的状态 Dead,并将动画设置为 E_01_act_009。

  17. 在动作设置中将水平移动速度设置为 0%。这是为了防止在死亡动画期间移动。

  18. 添加三个动作。第一个是更改对象属性 (ChangeObjectProperty)。请按以下方式设置:
    类型:对象属性 *更改节点属性(可在检查器中设置的项)。
    目标:自身
    目标节点:AttackCollision *不是 AttackArea2D。
    目标属性:disabled
    赋值:On *禁用攻击碰撞。这是为了防止玩家碰到尸体时受到伤害。

  19. 第二个是等待。添加 0.85 秒的等待时间。与之前一样,这是为了预留动画播放的时间。

  20. 第三个是使对象消失 (RemoveSelf)。这样,攻击范围将被禁用,播放死亡动画,然后对象消失。


  21. 将 AnyState 链接到 Dead,并将条件设置为 HP=0。本次不进行反转。

  22. 最后,再次进行测试运行。如果一切顺利,击中 5 发子弹后应播放死亡动画并消失。如果运行不正常,请检查链接和动作。

第三回请点击此处