明天实现的内容:
新增攻打状态 B
配置好咱们的新动画,将其退出动画机。首先咱们要将 Rig 中的如图所示的参数调整好了。
接下来,设置 Animation 页下的烘培,烘培旋转和 Y 轴,旋转依据 Original,Y 轴依据 Feet。
要实现间断攻打,攻打 B 要连贯到攻打 A 之后,在做攻打 A 动画时如果再次按下攻打键,就会从攻打 A 转换到攻打 B,咱们的转换条件是 attack。
攻打 A 转换到攻打 B 要设置为优先转换。
最初,批改这个玩意(这叫什么来着?),咱们不须要攻打 A 前面的收刀动作和攻打 B 后面的起刀动作,这样做就能“剪”掉这些不须要的动画了,也就是灰色局部。你也能够间接调整攻打 B 动画的起始地位。
新增攻打状态 C
和攻打 B 一样,配置好动画,放到动画机中就行,转换条件和之前的也是一样的。
连击的优化
在咱们之前的设计中,你能够通过疾速连按来实现连击,咱们心愿网络游戏玩家打出连击要更难一点,玩家只能在攻打快要完结的那一段时间内再按出攻打键能力连击,而不是随随便便就能打出连击。在接下来咱们要实现通过代码来重设 Attack 信号。确切来说,咱们将通过代码,在动画播放完挥砍动作时,将之前输出的 attack 信号给 Reset 掉,咱们将要通过动画事件 (Animation Events) 来实现以上性能。
动画事件能够在动画资源下增加,如图所示。咱们给须要做上述操作的动画资源都增加了这个叫 ResetTrigger 的事件,咱们并没有在事件名称中具体指明 reset 哪个 trigger,起因是咱们想要复用这个事件,咱们能够在 String 参数中指明咱们要 reset 的 trigger 的名字。
要让动画事件得以接管,咱们须要在 Animator 组件的同一个游戏物体上挂载一个脚本来实现具体代码。
代码如下:
public class AnimTriggerController : MonoBehaviour
{
// 动画组件
private Animator anim;
private void Awake()
{anim = GetComponent<Animator>();
}
// 动画事件 用于在执行时将 triggerName 代表的信号重置
public void ResetTrigger(string triggerName)
{anim.ResetTrigger(triggerName);
}
}
老师在这里提到了在 AnimTriggerController 中处理事件的两种计划,一种是就在 AnimTriggerController 中拿到咱们想要的动画组件对象,而后处理事件,另一种是 AnimTriggerController 不间接处理事件,而是将事件再 SendMessage 到 PlayerController 中进行解决。在这里咱们采纳第一种,因为曾经有太多的 SendMessage 了。