教程:来学习子弹的做法和精灵动画吧!

Part3:在玩家这边设置子弹的发射吧!

接着我们在玩家这边进行子弹的设置。
步骤分两个阶段:在「子弹」设置中把「火焰弹」登记到子弹数据里;添加「发射子弹」动作。

Part3-1:来设置「子弹」吧!

  1. 回到对象视图,把对象切换为「玩家」。

  2. 点击左上角的「+ 添加设置」。

  3. 在「添加设置」窗口中,添加「对象利用」里的「子弹」。

  4. 查看右侧的检查器,点击「子弹列表」中的「Array[BulletData]」将其展开,接着点击出现的「BulletData」再次展开。

  5. 展开「子弹基本设置」。首先把子弹的名称设为「火焰弹」,然后通过「指定子弹对象」的「一览」按钮添加「火焰弹」。

  6. 接着打开基本设置中的「无限制」(这里如果是关闭的,场景中已存在火焰弹时就无法发射)。基本设置变成图中的样子就可以了。

  7. 接下来展开「子弹飞行方式(初始动作)」,设置为「向发射对象的显示方向飞行」。

  8. 这样子弹数据这边的设置就完成了。我们做出了这样一份数据:把「火焰弹」朝「发射对象的显示方向」发射,且「无论场景内已有多少火焰弹」都能发射。

Part3-2:来设置「发射子弹」动作吧!

  1. 进入「编辑可视化脚本」,在「移动」状态附近创建一个新状态,把动画类别名称设为「shoot」,并命名为「地面射击」。

  2. 点击「+添加可执行动作」。左栏选择「攻击/子弹」中的「发射子弹」,右栏选择子弹数据「火焰弹」,然后「添加」。如果没有火焰弹,请检查玩家的「子弹」设置中是否正确设置了火焰弹。

  3. 动作这边设置完成了,接下来创建连接。从「移动」状态向「地面射击」添加连接,勾选「有输入」,然后点击「+添加输入」。

  4. 左栏选择「用于输入的操作键」,右栏把输入键设为 B、输入条件设为「刚按下瞬间」,然后「添加」。

  5. 就这样的话只有移动中才能发射火焰弹,所以也要从待机连过来。内容完全相同,所以把「移动」→「地面射击」的连接复制后粘贴到待机上,再接到地面射击。

  6. 最后创建从「地面射击」回到「待机」的连接,把状态切换的条件设为「动画已结束」。这样「shoot」动画播放完后就会回到待机。

  7. 设置完成了,不过你可能会觉得线条有些杂乱。状态可以通过拖动来移动,趁这个机会稍微整理一下也不错。(下图中整体把状态的位置下移,并把地面射击移到了上方。)

  8. 那么我们来测试游玩吧。如果设置正确,火焰弹会朝玩家面向的方向飞出,并一边弹跳一边前进。另外,「在这个阶段即使设置正确,子弹会消失但打不倒敌人」。请只确认子弹能否发射、是否会一边弹跳一边前进。

不顺利时的检查清单

・子弹不出来。
请检查「发射子弹」动作中是否正确指定了子弹数据。
・子弹出来了,但之后就动不了了。
请检查回到待机的连接设置是否正确,以及地面射击状态是否正确设置了 shoot 动画。
・子弹出来了,但第二次之后就不出来了。
请检查子弹数据的基本设置中「无限制」是否正确打开。
・子弹出来了,但不会弹跳。
请检查移动状态中是否正确设置了模板移动:弹跳,
以及「接触碰撞体」中是否误将「下」方向启用了。

Part3-3:让子弹能够打倒敌人

到这个阶段,即使设置正确,子弹碰到敌人后会消失,实际上伤害也确实造成了、HP 也变成了 0,但敌人却不会做出受伤动作。
原因在于,转到「受伤」状态的条件只设置了与「player」组的接触,而没有设置与玩家子弹所属的「player_bullet」的接触。我们马上来修正设置。

  1. 回到对象视图,打开「敌人」,点击「编辑可视化脚本」。复制并粘贴受伤状态。

  2. 会生成一个叫「受伤(1)」的状态,把标题改为「火焰弹受伤」,并删除其中设置的「设置对象速度」。(设置速度是把玩家弹起的动作,这里不希望子弹造成弹起。)

  3. 复制 walk→受伤的连接,粘贴为 walk→火焰弹受伤的连接。

  4. 展开检查器中的「接触攻击判定」,把目标对象组改为「Player_Bullet」。

  5. 接着同样复制 受伤→Dead 的条件,粘贴为 火焰弹受伤→Dead 的连接。

  6. 这样准备就完成了。被玩家的子弹击中后会转到火焰弹受伤,HP 变为 0 后应该会一路连到 Dead。我们来测试游玩试试。

不顺利时的检查清单

・子弹不会在敌人处停下
请检查火焰弹对象的「接触受击判定」条件。
・子弹消失了但敌人不消失。
请检查敌人的 walk→火焰弹受伤连接,以及 火焰弹受伤→Dead 连接的条件。

下一篇教程请从目录进入

进阶课题

到这里,你应该已经理解了子弹的发射方法和动画的设置方法,作为教程就到此为止……不过从游戏的角度来看,应该还有几处让人在意的地方。这里只写出解决方法,有兴趣的话请挑战一下。

空中无法发射子弹。

直接复制地面射击就行,创建一个「空中射击」状态,从「跳跃」状态和「下落」状态拉出连接。
从「空中射击」状态则只连接到「下落」状态。
所有设置都和地面射击相同即可。

・为什么不回到「跳跃」?
因为回到跳跃的话会再次跳起来。

・为什么要区分「地面射击」和「空中射击」?
是为了区分返回的目标。如果从空中射击回到「待机」,空中射击后就能在空中跳跃了。

增加敌人的 HP 后,敌人的动作会变得奇怪。

目前的做法在受到伤害后无法回到 walk 状态。(因为它是以 HP 只有 1 为前提做的。)
请准备从「受伤」「火焰弹受伤」回到 walk 的连接。
在这些连接上,把其他条件设为「开关/变量的值比较」HP>0,这样就能做到:HP 大于 0 时回到 walk,HP 为 0 时转到 dead。

另外,既然特意分出了状态,就可以读入新的官方粒子(例如 explode),在火焰弹受伤状态中使用「显示粒子」,这样只有被火焰弹击中时才会出现不同的粒子。