如何从SceneKit中的Collada文件中拆分出多个动画

itn*_*nti 5 animation objective-c caanimation ios scenekit

我正在将第三方.dae Collada文件作为场景加载到SceneKit项目中。

.dae文件中有许多不同的动画,设置在不同的时间/帧。我试图弄清楚如何将它们拆分出来,并通过引用名称引用每个动画。dae文件中没有可理解的参考名称-动画全部设置为一个动画。

我可以将动画解析为CAAnimation对象,并使用以下代码验证是否已成功完成此操作:

SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/man.dae"];
SCNNode *man = [scene.rootNode childNodeWithName:@"Bip01" recursively:YES];
CAAnimation *animation = [man animationForKey:@"test_Collada_DAE-1"];
[man removeAllAnimations];
[man addAnimation:animation forKey:@"animation"];
Run Code Online (Sandbox Code Playgroud)

有什么方法可以为我的CAAnimation对象设置开始和结束帧或时间?解析各种动画的最佳方法是什么?我希望我不必手动将dae文件拆分为多个文件,并分别加载每个文件。

Toy*_*yos 3

3D 工具通常将多个动画导出为带有子动画的单个动画。在这种情况下,SceneKit 会将这些动画加载为带有子动画的 CAAnimationGroup。因此,一种选择是“解析”动画组的子动画并检索您想要的动画。另一种选择是使用 SCNSceneSource 按名称检索(子)动画(但这仅在您的 3D 工具在导出 DAE 时导出名称时才有效)。

如果您需要“裁剪”动画(即从较长的动画中提取从 t0 开始、持续时间为 D 的动画),CoreAnimation 有一个 API:

  • 创建一个动画组来“裁剪”,持续时间为 D。

  • 添加要裁剪的动画作为子动画并将其 timeOffset 设置为 t0。