Unity的Animator的动画层(Layer)

需求是这样的,角色在待机和跑动中都可以攻击也可能受击,但如果是跑动切到攻击和受击时同时还要保持跑动的动画,同样的待机切换的,执行完后就是待机动画。如果只用一层,Animator Controller 就很复杂,还可能额外编写较多的其他代码。这里有个难点在于,当正在跑时,想执行攻击,用trigger即可,但如果攻击执行完以后,该执行什么?按理说,应该是回到跑。但是,不仅仅是跑动中可以攻击,而是待机中也可以攻击。如果这要通过代码实现,可能比较冗长。不过如果用两层动画层,就很容易实现。

1.建立base层,控制 “idle”, “attack”, “hit”,“die”的切换
在这里插入图片描述

这个之间的切换都使用各自的trigger来切换。其中设置“die”可以被anystate切换去。

2.建立Run层,控制“run”

在这里插入图片描述
默认状态是null,也就是这上面没有任何动画,是空的, “null”和“run”的切换用个bool值控制。最后的参数和层看起来如下

在这里插入图片描述
在这里插入图片描述

将Run Layer的weight设置成0.5.。因为我们需要的跑的时候,能攻击,且保持跑的状态,这两个状态被简单的处理到了不同的层里了,那必须有个权重。说的直白点,跑动中攻击,播放的既不是跑动也不是攻击的动画,而是两者的混合。

3.增加代码,当“attack”或者“hit”动画执行完后回到idle。主要还是想有个“中心”状态,保持一个星型的结构,好控制。

  void PlayFinishedReturnToIdle(AnimatorStateInfo stateInfo)
{
    //不设置Has Exit Time 切换会流畅
    if (stateInfo.IsName("attack") || stateInfo.IsName("hit"))
    {
        if (stateInfo.normalizedTime > 1.0f)
        {
            animator.SetTrigger("idle");
        }
    }
}

————————————————
版权声明:本文为CSDN博主「1024路漫漫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wuming2016/article/details/88395907

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值