如何在某些关键帧上播放和暂停默认的COLLADA动画?

时间:2019-05-08 12:57:40

标签: scenekit caanimation

我想播放和暂停FBX格式的动画。我找不到使它起作用的方法,因此我首先将fbx文件转换为dae(COLLADA)格式,可以将其导入以在SceneKit中使用。

我正在像这样加载dae文件,并将其添加到ARKit检测到的ARAnchor中(我认为在AR应用程序中加载它无关紧要)

func createNode() -> SCNNode {
    let node = SCNNode()

    // Instantiate the file
    let scene = SCNScene(named: file)!

    // Steal all their children
    scene.rootNode.childNodes.forEach { node.addChildNode($0) }

    // Scale the node
    node.scale = SCNVector3(scale, scale, scale)

    return node
}

现在可以播放原始fbx文件中包含的动画,这很好。现在,我想暂停它,并最终只播放动画的选定帧(以在用户单击按钮时以不同的步骤显示动画)。

我注意到有3个animationKey,它们包含在我实例化的节点的不同childNode中:

  • BBCharacter01AA_BoneLPlatform-Matrix-animation-transform
  • BBCharacter01AA_BoneRPlatform-Matrix-animation-transform
  • 未命名动画#2

我认为未命名的是通用名称,因此我尝试通过在具有动画的子节点上使用此名称来删除该名称:

node.removeAnimation(forKey: "unnamed animation #2", blendOutDuration: 0)

如果那行不通,我尝试删除所有可以用animationKeys找到的动画,但是模型仍然是动画。

我也尝试过单独实例化动画,并使用CAAnimationGroup(其duration为0)添加动画。我读到添加具有相同键的动画应该将其覆盖,但是似乎也没有停止动画。

我真的很茫然,我不知道下一步该怎么做。

编辑:我已在实例化的removeAllAnimations上尝试过SCNNode方法。但这也不起作用。

我尝试了sceneView.scene.isPaused = true,终于可以了!我正在尝试通过一种方式使用jerryrig,该方式使用添加模型的时间和暂停时间,以尝试将更新与动画上的isPaused对齐。

0 个答案:

没有答案