问题描述
上图是在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 State与Take 001连接如图,设置成Bool:run切换。再使用代码控制。更详细的教程
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控制。
所以将之前做的Animation的Legacy取消勾选,将平面的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撰写)