美文网首页
Unity更换Animator Controller状态机片段

Unity更换Animator Controller状态机片段

作者: 江枫枫Maple | 来源:发表于2019-11-07 15:48 被阅读0次

      最近又遇到一个新需求,需要动态修改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提供的方案)

相关文章

网友评论

      本文标题:Unity更换Animator Controller状态机片段

      本文链接:https://www.haomeiwen.com/subject/jfjvbctx.html