Unity更换Animator Controller状态机片段

2019-11-07  本文已影响0人  江枫枫Maple

      最近又遇到一个新需求,需要动态修改Animator Controller中绑定的动画片段,查API
发现Unity已经有写好的代码示例可以替换片段了。代码也很简单,需要借助AnimatorOverrideController进行修改。

using UnityEngine;

public class SwapWeapon : MonoBehaviour
{
    public AnimationClip[] weaponAnimationClip;

    protected Animator animator;
    protected AnimatorOverrideController animatorOverrideController;

    protected int weaponIndex;

    public void Start()
    {
        animator = GetComponent<Animator>();
        weaponIndex = 0;

        animatorOverrideController = new AnimatorOverrideController(animator.runtimeAnimatorController);
        animator.runtimeAnimatorController = animatorOverrideController;
    }

    public void Update()
    {
        if (Input.GetButtonDown("NextWeapon"))
        {
            weaponIndex = (weaponIndex + 1) % weaponAnimationClip.Length;
            animatorOverrideController["shot"] = weaponAnimationClip[weaponIndex];
        }
    }
}

      最后需要注意的是这里替换的shot不是Controller中的state名字,而是动画片段的名称。(也就是state中的Motion,这样如果替换的是Blend Tree也可以知道要替换哪一个动画片段,不过每次替换都相当于一次动画重新绑定的过程,所以可能会有一定的性能消耗,如果有批量替换需求,可以查阅上面的API提供的方案)

上一篇 下一篇

猜你喜欢

热点阅读