Unity中Animator动态添加AnimationClip

AnimatorController中一下加载大量动画,会使游戏内存增大很多,所以想动态增加AnimatorController中的动画,达到使用那个动画就加载对应动画的功能。
研究后发现可以通过AnimatorOverrideController实现。通过替换动画的方式,用需要播放的动画将控制器中指定的一个动画替换,这样能间接达到动态加载的功能

using UnityEngine;
public class test : MonoBehaviour
{
    public Animator m_Animator;
    public RuntimeAnimatorController m_RuntimeAnimatorController;
    string mOriginClipName = "play";

    void OnGUI()
    {
        if (GUI.Button(new Rect(0, 0, 50f, 50f), "Pose01"))
            UpDateAnimator("player@pose01");
        else if (GUI.Button(new Rect(60, 0, 50f, 50f), "Pose02"))
            UpDateAnimator("player@pose02");
        else if (GUI.Button(new Rect(120, 0, 50f, 50f), "Pose03"))
            UpDateAnimator("player@pose03");
        else if (GUI.Button(new Rect(180, 0, 50f, 50f), "Pose04"))
            UpDateAnimator("player@pose04");
        else if (GUI.Button(new Rect(0, 60, 50f, 50f), "Stand"))
            m_Animator.Play("standby");
    }

    void UpDateAnimator(string pAnimResourceName)
    {
        var tOverrideController = new AnimatorOverrideController();
        tOverrideController.runtimeAnimatorController = m_RuntimeAnimatorController;

        var mAnimationClips = Resources.LoadAll<AnimationClip>(pAnimResourceName);
        if (mAnimationClips.Length <= 0)
            return;

        tOverrideController[mOriginClipName] = mAnimationClips[0];
        m_Animator.runtimeAnimatorController = null;
        m_Animator.runtimeAnimatorController = tOverrideController;
        m_Animator.Play(mOriginClipName, 0, 0);
        Resources.UnloadUnusedAssets();
    }
}

其中:

1

2

3

m_Animator.runtimeAnimatorController = null;

 

Resources.UnloadUnusedAssets();

两行很关键,没有这两行,会出现错乱或者内存持续增加

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值