SceneKit:渲染两个带有骨架动画的SCNNode时出错

时间:2017-06-21 06:12:39

标签: swift scenekit

我尝试使用以下代码加载骨架动画:

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文件加载骨架动画,请分享... 非常感谢你......

1 个答案:

答案 0 :(得分:0)

这可能是SceneKit中的错误,也可能是Metal Validation Layer的误报。

您可以尝试disable the validation layer in your scheme options或尝试在Xcode之外打开您的应用,以查看骨骼动画是否正常工作以及错误是否相关。