好的,我在这里与ARKit和SceneKit一起工作,但在查看其他仅涉及SceneKit的问题时遇到了麻烦,尝试使用.dae
格式中的模型并加载各种动画以使该模型运行-现在我们已经进入iOS11,似乎一些解决方案不再适用。
以下是获取我的模型的方式-从没有应用任何动画的基本.dae
场景中。 我正在使用Maya导入这些 -
var modelScene = SCNScene(named: "art.scnassets/ryderFinal3.dae")!
if let d = modelScene.rootNode.childNodes.first {
theDude.node = d
theDude.setupNode()
}
然后在 Dude 类中:
func setupNode() {
node.scale = SCNVector3(x: modifier, y: modifier, z: modifier)
center(node: node)
}
需要对坐标轴进行缩放和居中操作,因为我的模型并不在原点上。这个方法有效。现在,我尝试加载一个名为“Idle.dae”的不同场景,并在模型上播放动画:
func animationFromSceneNamed(path: String) -> CAAnimation? {
let scene = SCNScene(named: path)
var animation:CAAnimation?
scene?.rootNode.enumerateChildNodes({ child, stop in
if let animKey = child.animationKeys.first {
animation = child.animation(forKey: animKey)
stop.pointee = true
}
})
return animation
}
我打算对导入Xcode的所有动画场景进行此操作,并将所有动画存储在其中。
var animations = [CAAnimation]()
Xcode首先声明animation(forKey:
已经被弃用,这似乎不起作用(据我所知),会使我的模型重新居中和缩小到原来的巨大大小。这会破坏其位置,因为我期望在动画中使模型移动,例如,在我的游戏中实例化的模型将立即跳转到同一位置。
而其他尝试则会导致崩溃。我对场景工具非常陌生,并试图掌握如何正确地动画一个在场景中任意实例化的.dae
模型-
iOS11中如何加载一组要应用于它们的SCNNode的动画?
如何使这些动画在无论模型在哪里都能运行(不将其直接定位到其他位置)?