如何在 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 模型,其中动画剪辑作为子资产(嵌入其中),我想为其中的所有剪辑启用循环。我发现AnimationUtility
的GetClipSettings
方法现在已经过时了,我也尝试过使用它,但是没有用。这可能是因为 Unity 更改了他们的循环 API,并且似乎访问 loopTime 属性的唯一方法是手动访问 fbx 模型的子资产并检查 loopTime 属性。但是,我必须自动化这个过程,因为我在构建资产包之前为我的模型生成动态动画控制器。该管道包括后/预处理,然后通过编辑器脚本构建资产包。到目前为止,我遇到了this post,我可以通过为每个剪辑设置ModelImporterClipAnimation.loopTime = true
来启用loopTime,并且它可以工作。但是,现在模型看起来完全是粉红色的,因为无论出于何种原因它失去了对其材质的引用,这仅在我包含 AssetPostprocessing 脚本时才会发生。
应该如何处理?
如果包含AssetPostprocessor
的OnPreprocessAnimation
,为什么模型会丢失材料?我错过了什么吗?
如果我弄乱了AssetPostprocessor
,我是否还应该通过其他方法处理材料引用?
我们可以通过其他方式访问 loopTime 吗?但是,文档中没有指定。
我的代码与上面引用的帖子完全相同,只是稍作更改以启用循环时间。还是有更好的方法来完成这一切?
附:经过一天的搜索和实验,我发布了这个问题,如果问题不够清楚,请提前道歉。如果需要,我可以添加更多信息。
【问题讨论】:
【参考方案1】:我认为您必须自己处理材料。导入模型时可以设置ModelImporter.importMaterials
为false
,创建默认漫反射材质。
如果材质已经存在,也可以在导入模型时搜索已有材质并加载:
ModelImporter modelImporter = (ModelImporter)assetImporter;
modelImporter.materialName = ModelImporterMaterialName.BasedOnMaterialName;
modelImporter.materialSearch = ModelImporterMaterialSearch.Local;
请参阅 ModelImporterMaterialName
和 ModelImporterMaterialSearch
文档了解您拥有的其他选项。
【讨论】:
感谢您的回答。这很有帮助。我删除了项目并再次运行构建,然后由于某种原因它似乎工作正常。我唯一添加的是现有 AssetPostprocessor 脚本之上的以下 sn-p。不知道这是否是它现在工作的原因,我现在就继续使用它。Material OnAssignMaterialModel(Material mat, Renderer rend) return null;
我也没有这个问题,想知道为什么会这样。无论如何,您还可以像我一样从代码中指定材料,这是一件好事。很高兴你解决了。以上是关于如何在 Unity 2017.1 中为动画剪辑(FBX 和其他)启用 loopTime的主要内容,如果未能解决你的问题,请参考以下文章
在 Firefox 60 或更早版本中为 SVG 剪辑路径设置动画时出现随机方块
Unity2017.1官方UGUI文档翻译——Animation Integration