【发布时间】:2014-05-04 21:57:29
【问题描述】:
我是使用 Unity 的新手。在我的游戏中,模型和动画从 3DMAX 导出为 .fbx 文件,动画在 Unity 中进行剪辑,但没有生成 .anim 文件,我需要单独的 .anim 文件,因为即使我已剪辑动画,以下代码也无法运行“运行” ":
var clip = animation["run"];
有人可以帮助我吗?提前致谢。
【问题讨论】:
我是使用 Unity 的新手。在我的游戏中,模型和动画从 3DMAX 导出为 .fbx 文件,动画在 Unity 中进行剪辑,但没有生成 .anim 文件,我需要单独的 .anim 文件,因为即使我已剪辑动画,以下代码也无法运行“运行” ":
var clip = animation["run"];
有人可以帮助我吗?提前致谢。
【问题讨论】:
终于找到答案了,在.fbx文件中的动画剪辑上按CTRL+D会创建一个单独的.anim文件,好奇怪的操作!
【讨论】:
您必须在导入时设置动画。在 Unity 中选择 .fbx 模型,然后转到 Animations 选项卡。在那里你必须定义剪辑。 .anim 文件将在模型下生成。
如果您在动画选项卡中看不到剪辑,请将 Rig 下的“动画类型”更改为 Legacy。
【讨论】:
我写了一个脚本很容易做到这一点
using System.IO;
using UnityEditor;
using UnityEngine;
public class AnimationExtractor: MonoBehaviour
{
[MenuItem("Assets/Extract Animation")]
private static void ExtractAnimation()
{
foreach (var obj in Selection.objects)
{
var fbx = AssetDatabase.GetAssetPath(obj);
var directory = Path.GetDirectoryName(fbx);
CreateAnim(fbx, directory);
}
}
static void CreateAnim(string fbx, string target)
{
var fileName = Path.GetFileNameWithoutExtension(fbx);
var filePath = $"{target}/{fileName}.anim";
AnimationClip src = AssetDatabase.LoadAssetAtPath<AnimationClip>(fbx);
AnimationClip temp = new AnimationClip();
EditorUtility.CopySerialized(src, temp);
AssetDatabase.CreateAsset(temp, filePath);
AssetDatabase.SaveAssets();
}
}
【讨论】: