当前位置: 首页 > article >正文

Unity 运行时更换Animator状态里的动画剪辑

AnimatorController是一个编辑器里的类,用来处理asset的。但是运行时改不了asset。只能通过AnimatorOverrideController来实现,不过操作也很简单。


public class TestOverrideAnimator : MonoBehaviour
{
    public Animator animator;
    public bool testBtn;
    public AnimationClip replaceClip;

    private AnimatorOverrideController overrideController;
    private AnimationClip sourceClip;

    void Start()
    {
        //新建一个AnimatorOverrideController
        overrideController = new AnimatorOverrideController(animator.runtimeAnimatorController);
        //获取原始的动画Clip,因为测试只有一个动画,就直接这么获取了,如果动画很多个,可以根据名字遍历查找
        //编辑器里可以获得状态机的状态,但是运行时获取不到。
        //也可以通过overrideController.GetOverrides()获取映射列表
        sourceClip = animator.runtimeAnimatorController.animationClips[0];
        //使用新的AnimatorOverrideController
        animator.runtimeAnimatorController = overrideController;
    }

    void Update()
    {
        if (testBtn)
        {
            testBtn = false;
            //传入原始Clip和新Clip的映射就行了
            //映射的目标如果是null,就可以取消替换
            overrideController.ApplyOverrides(new List<KeyValuePair<AnimationClip, AnimationClip>>()
            {
                new (sourceClip, replaceClip),
            });
            //播放Test状态,也可以在编辑器里手动播放
            animator.Play("Test", 0, 0);
        }
    }
}

参考

Unity - Scripting API: AnimatorOverrideController.ApplyOverrides


http://www.kler.cn/a/612721.html

相关文章:

  • SpringBoot集成kafka极简教程
  • 第4.1节:使用正则表达式
  • vue中使用threejs的加载纹理没有效果
  • 自定义minshell
  • Sa-Token核心功能解剖二( Session会话、 持久层Redis扩展 、全局侦听器 、全局过滤器、多账号体系认证、单点登录)
  • UniApp和微信小程序中v-switch夜间模式动画开关
  • Vulnhub:Digitalword.local: FALL靶机渗透
  • 【科研绘图系列】R语言绘制PCA与变量的相关性散点图(scatter plot)
  • Git回退文件到指定提交
  • C++多线程编程简介
  • NetMizer-日志管理系统-远程命令执行漏洞挖掘
  • 经典优化算法:遗传算法(Genetic Algorithm, GA)
  • Python正则表达式(二)
  • docker中安装 python
  • GPT-SoVITS本地部署:低成本实现语音克隆远程生成音频全流程实战
  • 课程5. 机器学习的核心方法
  • 简单介绍My—Batis
  • 亚马逊云科技全面托管DeepSeek-R1模型现已上线
  • 解决 Gin Web 应用中 Air 热部署无效的问题
  • pyqt第一个窗口程序