我尝试使用以下代码加载骨架动画:
let file = Bundle.main.url(forResource: name, withExtension: "dae")
let source = SCNSceneSource(url: file!, options: nil)
let node = SCNNode()
for n in try! (source?.scene(options: nil).rootNode.childNodes)! as [SCNNode] {
node.addChildNode(n)
}
let animationIDs = source?.identifiersOfEntries(withClass: CAAnimation.self)
var animationArray:[CAAnimation] = []
for id in animationIDs!{
let animation = source?.entryWithIdentifier(id, withClass: CAAnimation.self)
animationArray.append(animation!)
}
let animationGroup = CAAnimationGroup()
animationGroup.animations = animationArray
animationGroup.duration = 1000
animationGroup.repeatCount = 1000
animationGroup.beginTime = 0
node.addAnimation(animationGroup, forKey: "Animation")
scene.rootNode.addChildNode(node)
首先,它与主要英雄节点一起成功运行。骨骼动画看起来很好。但是当我创建敌人节点时,我在加载游戏场景后收到以下错误:
validateFunctionArguments:2665: failed assertion `(length - offset)(10992) must be >= 12304 at buffer binding at index 1 for scn_node[0].'
那么它有什么问题?似乎我仍然可以在没有骨架动画的情况下加载其他模型,并且这些动画仍然可以完美运行。但这是否意味着SceneKit只允许我们在一个特定的SCNNode上加载骨架动画?
如果你对这个错误有所了解,请帮我解决一下...... 如果你有更好的解决方案如何从dae文件加载骨架动画,请分享... 非常感谢你......
答案 0 :(得分:0)
这可能是SceneKit中的错误,也可能是Metal Validation Layer的误报。
您可以尝试disable the validation layer in your scheme options或尝试在Xcode之外打开您的应用,以查看骨骼动画是否正常工作以及错误是否相关。