我使用以下代码加载.scn文件中包含的模型(包括一个动画):
// Recursively load all scene's nodes
let scene = try! SCNScene(url: sceneFileURL, options: nil)
self.modelNode = SCNNode()
let nodeArray = scene.rootNode.childNodes
for childNode in nodeArray {
self.modelNode?.addChildNode(childNode as SCNNode)
}
我试图在应用的其他部分加载动画。我首先创建sceneSource对象
self.sceneSource = SCNSceneSource(url: sceneFileURL, options: [SCNSceneSource.LoadingOption.animationImportPolicy : SCNSceneSource.AnimationImportPolicy.playRepeatedly])
然后我寻找动画
for child in modelNode.childNodes {
for key in child.animationKeys {
print("add animation:\(key)")
let animation = self.sceneSource?.entryWithIdentifier(key, withClass: CAAnimation.self)
//child.addAnimation(animation!, forKey: key)
animation?.repeatCount = 10
sceneView.scene.rootNode.addAnimation(animation!, forKey: key)
}
}
一些调试信息:
1)循环可以正确找到动画键(它被打印)
2)SceneSource
已正确初始化
问题:entryWithIdentifier
返回nil,因此无法加载动画
注意:如果我使用addAnimation:ForKey
(目前已弃用,我会避免使用它)我得到一个动画对象,但一旦添加到子注释中,它对渲染的模型没有影响ARKit。
可在此处使用的模型:https://files.fm/u/n7khpy58