Unity Animator层级控制需要注意事项以及详细做法

本文介绍了如何使用Unity的Animator类控制不同层的动画播放,通过设置播放速度实现物体的放大缩小,并强调了处理非Loop动画时的区间判断技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:在项目制作过程中碰到通过动画控制器的不同层来控制一个物体的旋转、位移、甚至是缩放,例如一个物体的放大以及缩小可以只通过一个动画片段加上一个控制它播放速度的float值来达到物体的放大缩小功能。

部分重要代码详情

    /// <summary>
    /// 控制Animator的LayerState
    /// </summary>
    /// <param name="ani"> 要控制的Animator </param>
    /// <param name="aniName"> 要播放的animation_Name </param>
    /// <param name="layer"> 要播放的层 </param>
    /// <param name="value"> 要设置的播放速度 + 为正播放 - 为倒播 </param>
    void SetAnimatorLayerState(Animator ani, string aniName, int layer, float value)
    {
        var str = "layer" + layer;
        var normalizedTime = ani.GetCurrentAnimatorStateInfo(layer).normalizedTime;

        ani.SetFloat(str, value);
        if (normalizedTime >= 1 && value < 0)
        {
            ani.Play(aniName, layer, 1);
        }
        else if (normalizedTime <= 0 && value > 0)
        {
            ani.Play(aniName, layer, 0);
        }
    }

在这特别需要注意的是动画如果不是默认的Loop动画,它的normalizedTime是会根据你设置的speed的正负一直去累加累减的,因此在判断是否播放完毕时需要判断一个区间范围值而不是直接判断两者是否相等,笔者就是踩了这方面的坑导致了一系列的问题又找不到一个确切的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值