3dsMax制作弯曲动画导入Unity后动画丢失

问题描述

上图是在3ds中预览的效果,可以看见对上面的平面进行了一个bend变形操作。在输出为下图的FBX后,发现其他动画还保留,唯独bend动画丢失。
那么应该如何保留所有动画呢?
在这里插入图片描述
在这里插入图片描述

几种思路,一种是找到能导出导入的方法;第二种是平面动画改成在unity实现,两个动画结合起来;第三种是换个平台重新做动画,比如catia,但是如何导出导入尚不清楚;第四种是录屏,然后单击事件后播放视频。(2021/2/9发现问题)

目前的解决方式

(2021/2/28找到了解决方法)
网上下载了MegaFiers资源包,导入Unity后可对GameObject进行弯曲操作,当然还有各种其他操作,有诸多大佬讲解,不在此作为重点。

FBX文件导入到Unity,依然只有简单地动画而会丢失弯曲动画。所以保留其他动画的同时用Unity按Unity的方式建立物体和动画。
在这里插入图片描述
可以添加Bend组件,接着就可以根据需求录制动画了。
在这里插入图片描述

新出现的问题

事情并没有这么简单。

两组动画的整体性

由于普通动画和弯曲动画是分开来做的,所以失去了整体性。

刚导入的结构基本什么组件都没有。
在这里插入图片描述
可以打开这个三角
在这里插入图片描述
在里面找到它的动画,直接拖到物体上。
在这里插入图片描述
会发现生成了Animator组件
在这里插入图片描述
这和Animation还是有区别的,但是我不是很清楚。
(2021/3/3撰写)

如何控制动画的播放

结构动画的控制

刚导入结构时自带的Animator,启动后就开始播放动画Take 001,只播一次且不受控制。目标是实现可控制的动画播放。
在这里插入图片描述
尝试了一些方法后找到一个暂时可行的。
建立一个空状态New State,将New StateTake 001连接如图,设置成Boolrun切换。再使用代码控制。更详细的教程
在这里插入图片描述

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 
/// </summary>
public class Drawtest : MonoBehaviour
{
    private Animator animator;
    private void Start()
    {
        animator = GetComponent<Animator>();
    }

    private void OnGUI()
    {
        if(GUILayout.Button("开始"))
        {
            animator.SetBool("run", true);
        }
        if (GUILayout.Button("停止"))
        {
            animator.SetBool("run", false);
        }

    }
}

效果如下
在这里插入图片描述

平面的弯曲动画

可以采取类似的方式控制,即用Animator控制。
所以将之前做的AnimationLegacy取消勾选,将平面的Animation组件删除,添加Animator组件,将之前的Skin动画添加到Animator中,其余操作类似。
在这里插入图片描述
也就是说用同一组代码可以分别实现对两者的控制。

如何同时控制

可见,如果都显示的话使用按钮不能实现两组动画的控制
在这里插入图片描述
原因是按钮叠加了。结构的开始停止两个按钮与平面的两个按钮重合了,也就是运行后分别生成了两组、四个按钮。

如何实现一个按钮同时控制两组动画

因为两个脚本分别控制的会生成两组按钮,为了使用一组按钮实现对两个动画的控制,需要整合到一个脚本中。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Drawtest : MonoBehaviour
{
    private Animator animator;
    private Animator childanimator;
    private GameObject skin;
    private void Start()
    {
        animator = GetComponent<Animator>();
        skin = GameObject.Find("Plane");
        childanimator = skin.GetComponent<Animator>();
    }


    private void OnGUI()
    {
        if(GUILayout.Button("开始"))
        {
            animator.SetBool("run", true);
            childanimator.SetBool("run", true);
        }
        if (GUILayout.Button("停止"))
        {
            animator.SetBool("run", false);
            childanimator.SetBool("run", false);
        }

    }
}

(2021/3/5撰写)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值