【Unity动画】动画混合树(BlendTree)无缝过渡+两个动作同时播放

1.创建动画混合树片段 

混合树的级别和一个动画片段一样,只不过混合树里面包含了多个动作。

双击Blend Tree 进去混合树的编辑界面

 这里面可以添加很多个动作,然后选定一个之前设置好的任意一个参数作为控制变量。

这个参数只能选用Float类型!我前面就定义了一个float类型的变量,叫run。因此它默认帮我选了run

2.使用动画混合树的原因:

当你有一套连续的动作,比如从走路、跑步、投射,他们可以用一个参数的变化来控制切换,并且实现非常自然的过渡。比如人物站立、小走、走路、快走和跑这几个动画,都有一个共同的变量-速度。那么我们可以用一个速度来控制不同的动画自动切换,虽然在状态机我们可以给多个片段设置触发参数来实现,但是,比如站立时速度=0,小走速度可以设置大于0小于2,正常走设置大于2小于5.。。。。。但是0 1 2这三个速度始终都是一个动作。

动画混合树的厉害之处就是,假如参数为0时,播放站立摆手打招呼

速度达到2播放走路动画

那么速度处于0-2之间的时候,他会把站立和走路的动画,混合到一起,就像两个图片半透明后融合在一起,类似图像混合模式,正片叠底、叠加等等!

Unity 混合树居然可以把两个动画混合到一起,参数为0-2 之间,就会一边站立摆手打招呼一遍走路动画。只不过两个动作各自取一般的速度

3.动画混合树参数的设置和理解

取消Automate Thresholds 美[ˈθrɛʃˌhoʊldz] 自动门槛设置

然后拖入对应的motion

设置每一个行为对应上面参数的门槛,也就是参数触发临界值

这里面依据的参数是run,这是我们在参数面板随便自定义的。所以说这个参数面板的参数是公用的。类似一个全局变量,过渡线可以使用,混合树也可以使用。代码控制方法也一样!

参数随便设置,但是跨度越大,动画过渡时间越长,越精细。剩下的就是我们在代码中实时控制run这个参数就可以了(例如 setFloat(“run”,0))

动画效果是跟随这个参数来变化,来融合的!

// 注意:以下示例代码是简化的,实际使用时需要根据项目需求进行调整和扩展。

using UnityEngine;

public class CharacterController : MonoBehaviour
{
    private Animator animator;
    private float speed;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 获取输入或其他方式的速度值
        speed = Mathf.Clamp01(Input.GetAxis("Vertical"));

        // 更新Animator的Speed参数
        animator.SetFloat("Speed", speed);

        // 触发过渡条件
        if (speed > 0.5f)
        {
            animator.SetBool("IsRunning", true);
        }
        else
        {
            animator.SetBool("IsRunning", false);
        }
    }
}


```

动画融合是游戏开发中一个关键的技术,能够增强游戏角色的表现力和逼真感。在Unity中,动画混合树提供了一个强大而灵活的工具,通过合理使用Blend Trees和动画过渡,可以实现各种复杂的动画效果。通过深入了解这些技术,开发者能够在游戏中创造出更加生动、流畅的动画体验。

猜你喜欢

转载自blog.csdn.net/leoysq/article/details/134795584