明天实现的内容:
新增攻打状态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了。