如何在 Unity 2017.1 中为动画剪辑(FBX 和其他)启用 loopTime

Posted

技术标签:

【中文标题】如何在 Unity 2017.1 中为动画剪辑(FBX 和其他)启用 loopTime【英文标题】:How to enable loopTime for animation clips (FBX and others) in Unity 2017.1 【发布时间】:2018-02-05 19:59:44 【问题描述】:

我有一个 FBX 模型,其中动画剪辑作为子资产(嵌入其中),我想为其中的所有剪辑启用循环。我发现AnimationUtilityGetClipSettings 方法现在已经过时了,我也尝试过使用它,但是没有用。这可能是因为 Unity 更改了他们的循环 API,并且似乎访问 loopTime 属性的唯一方法是手动访问 fbx 模型的子资产并检查 loopTime 属性。但是,我必须自动化这个过程,因为我在构建资产包之前为我的模型生成动态动画控制器。该管道包括后/预处理,然后通过编辑器脚本构建资产包。到目前为止,我遇到了this post,我可以通过为每个剪辑设置ModelImporterClipAnimation.loopTime = true 来启用loopTime,并且它可以工作。但是,现在模型看起来完全是粉红色的,因为无论出于何种原因它失去了对其材质的引用,这仅在我包含 AssetPostprocessing 脚本时才会发生。

应该如何处理?

如果包含AssetPostprocessorOnPreprocessAnimation,为什么模型会丢失材料?我错过了什么吗?

如果我弄乱了AssetPostprocessor,我是否还应该通过其他方法处理材料引用?

我们可以通过其他方式访问 loopTime 吗?但是,文档中没有指定。

我的代码与上面引用的帖子完全相同,只是稍作更改以启用循环时间。还是有更好的方法来完成这一切?

附:经过一天的搜索和实验,我发布了这个问题,如果问题不够清楚,请提前道歉。如果需要,我可以添加更多信息。

【问题讨论】:

【参考方案1】:

我认为您必须自己处理材料。导入模型时可以设置ModelImporter.importMaterialsfalse,创建默认漫反射材质。

如果材质已经存在,也可以在导入模型时搜索已有材质并加载:

ModelImporter modelImporter = (ModelImporter)assetImporter;
modelImporter.materialName = ModelImporterMaterialName.BasedOnMaterialName;
modelImporter.materialSearch = ModelImporterMaterialSearch.Local;

请参阅 ModelImporterMaterialNameModelImporterMaterialSearch 文档了解您拥有的其他选项。

【讨论】:

感谢您的回答。这很有帮助。我删除了项目并再次运行构建,然后由于某种原因它似乎工作正常。我唯一添加的是现有 AssetPostprocessor 脚本之上的以下 sn-p。不知道这是否是它现在工作的原因,我现在就继续使用它。 Material OnAssignMaterialModel(Material mat, Renderer rend) return null; 我也没有这个问题,想知道为什么会这样。无论如何,您还可以像我一样从代码中指定材料,这是一件好事。很高兴你解决了。

以上是关于如何在 Unity 2017.1 中为动画剪辑(FBX 和其他)启用 loopTime的主要内容,如果未能解决你的问题,请参考以下文章

在 Firefox 60 或更早版本中为 SVG 剪辑路径设置动画时出现随机方块

在 WebKit 中为 CSS 剪辑属性设置动画的问题

Unity2017.1官方UGUI文档翻译——Animation Integration

Unity 2D Animation——3.待机动画录制

如何在 Unity 中从 .fbx 文件创建 .anim 文件?

如何在 Flash 中为 MovieClip 分配属性并在 Flex 中访问它们?