我想播放和暂停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中:
我认为未命名的是通用名称,因此我尝试通过在具有动画的子节点上使用此名称来删除该名称:
node.removeAnimation(forKey: "unnamed animation #2", blendOutDuration: 0)
如果那行不通,我尝试删除所有可以用animationKeys
找到的动画,但是模型仍然是动画。
我也尝试过单独实例化动画,并使用CAAnimationGroup
(其duration
为0)添加动画。我读到添加具有相同键的动画应该将其覆盖,但是似乎也没有停止动画。
我真的很茫然,我不知道下一步该怎么做。
编辑:我已在实例化的removeAllAnimations
上尝试过SCNNode
方法。但这也不起作用。
我尝试了sceneView.scene.isPaused = true
,终于可以了!我正在尝试通过一种方式使用jerryrig,该方式使用添加模型的时间和暂停时间,以尝试将更新与动画上的isPaused
对齐。