美文网首页
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