Unity 动态加载并播放3D max导入的模型非自身动画(Animation)的方法

带有动画的3D max 模型导入Unity中,一般会自动设置为Animator的新动画系统,若想使用Animation的形式播放,需要进行一下设置。
1、在Project中找到导入的模型物体FBX,打开Inspector面板
2、在Inspector中选择Rig中Animation Type,将Generic 设置为Legacy,如下图
在这里插入图片描述
3、点击Apply,完成由Animator转换为Animation,如下图
在这里插入图片描述

在开发过程可能会出现,模型需要播放另一个相同模型中的另一段动画片段时的问题,我们可以将需要播放动画的模型的Fbx放入Resources中,通过代码动态加载该模型的动画片段指定给另一个模型物体进行播放动画。
自己封装一个方法
代码如下:

  /// <summary>
    /// 播放物体动画
    /// </summary>
    /// <param name=" AnimObject ">动画物体</param>
    /// <param name="AnimClipPathName">动画物体路径名</param>
    /// <param name="isLoop">是否循环播放</param>
 public void PlayAnimationByAnimClip( GameObject AnimObject ,string AnimClipPathName,bool isLoop) {
        Animation anim=null;
        AnimationClip animClip = null;    
        animClip = LoadAnimationClipByPathNameFromRes(AnimClipPathName);
        if ( AnimObject != null&& animClip!=null )
        {          
            AnimObject.SetActive(true);                     
            anim = AnimObject.GetComponent<Animation>();
            if ( anim ==null)    anim = AnimObject.AddComponent<Animation>();         
            anim.AddClip(animClip, animClip.name);
            anim.playAutomatically = false;           
            if ( isLoop == false )
            {
                anim.wrapMode = WrapMode.Default;
            }
            else {
                anim.wrapMode = WrapMode.Loop;
            }
            if ( anim.isPlaying ) return;
            anim[animClip.name].time = 0;
            anim.Play(animClip.name);
        }
        else {         
        }
    }

    AnimationClip LoadAnimationClipByPathNameFromRes(string AnimClipPathName)
    {
       return (AnimationClip)Resources.Load("Animation/"+ AnimClipPathName, typeof(AnimationClip));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值