[ARPG阶段二] 18.两个动画的简化Blend及测试

提供简化的两个动画Blend的方法并对Blend模式测试。

首先对上一节漏了一块逻辑补一下,传进来的AudioClipList是要对其进行权重设置的。

    public void SetBlendWeight(List<float> weightList)
    {
        for (int i = 0; i < blendClipPlayableList.Count; i++)
        {
            blendMixer.SetInputWeight(i, weightList[i]);
        }
    }

另外加了Blend要给Mixer开放三个端口,ResetMixer的时候记得清空clipList。


        // 创建混合器
        mixer = AnimationMixerPlayable.Create(graph,3);

    public void ResetBlend(int animationCount)
    {
        //创建Blend混合器
        graph.Disconnect(mixer, 2);
        blendMixer = AnimationMixerPlayable.Create(graph, animationCount);
        graph.Connect(blendMixer, 0, mixer, 2);
        blendClipPlayableList.Clear();  

    }

有时候我们Blend的只是两个动画,不希望传一个List,所以做方法的重载,将List改写成传入两个AnimationClip,对应权重参数传一个即可。

    /// <summary>
    /// 播放混合动画(2个)
    /// </summary>
    /// <param name="clips"></param>
    /// <param name="speed"></param>
    /// <param name="transitionFixedTime"></param>
    public void PlayBlendAnimaiton(AnimationClip clip1,AnimationClip clip2, float speed = 1, float transitionFixedTime = 0.25f)
    {
        ResetBlend(2);
        currentisBlend = true;

        CreateAndConnectBlendPlayable(clip1, 0, speed);
        CreateAndConnectBlendPlayable(clip2, 1, speed);

        //如果是第一次播放,不存在过度
        if (clipPlayable1.Equals(default(AnimationClipPlayable))) return;
        //设置过渡
        if (transitionCoroutine != null) StopCoroutine(transitionCoroutine);// 避免开启多个协程
        if (currentisClipPlayable1)
        {
            transitionCoroutine = StartCoroutine(TransitionAnimation(0, 2, transitionFixedTime));
        }
        else
        {
            transitionCoroutine = StartCoroutine(TransitionAnimation(1, 2, transitionFixedTime));
        }
    }


    public void SetBlendWeight(float clip1Weight)
    {
        blendMixer.SetInputWeight(0, clip1Weight);
        blendMixer.SetInputWeight(1, 1 - clip1Weight);
    }

测试

之前我们写的PlayAnimation和PlayBlendAnimation都是在AnimationController里面的方法,为了让外界调用,我们需要在PlayController里再包装一层。PlayerController->PlayerView->AnimationController。

    public void PlayBlendAnimaiton(string clip1Name, string clip2Name, float speed = 1, float transitionFixedTime = 0.25f)
    {
        AnimationClip clip1 = warriorConfig.GetAnimationByName(clip1Name);
        AnimationClip clip2 = warriorConfig.GetAnimationByName(clip2Name);
        view.Animation.PlayBlendAnimaiton(clip1, clip2, speed, transitionFixedTime);

    }

    public void SetBlendAnimationWeight(float clip1Weight)
    {
        view.Animation.SetBlendWeight(clip1Weight);
    }

在玩家的移动状态进入时,我们对原来的播放单个动画部分改成播放Blend动画,并通过按键更改走和跑的权重来实现切换。

alt

效果:

alt

Unity独立游戏开发-ARPG 文章被收录于专栏

Unity独立游戏开发

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务