您的位置:首页 > 移动开发 > Unity3D

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

2019-01-09 10:19 1456 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wks310/article/details/86134484

带有动画的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));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: