SceneKit将.dae中的动画加载到场景中的模型中

时间:2017-07-30 16:59:09

标签: animation scenekit mesh collada skinning

如果有人可以帮助我,我会很感激:)

使用SceneKit,我想要实现的是将t-pose角色模型文件和动画文件分开,以便我可以在运行时加载它们。我准备了我的模型文件,其中包括各自根节点中的网格和装备。我还准备了动画.dae文件。这些都是在Blender中创建的,动画是从mixamo导出的。动画.dae文件仅包含装备节点。我已成功将它们加载到我的场景中并应用了所选的动画。

这是我的文件夹结构:Screen Shot

我试图像下面这样做:

guard let scene = SCNScene(named: "art.scnassets/bodies/model_tpose.scn") else { return }

// Create a mount node
let mountNode = SCNNode()

// Find and add model body and rig nodes
guard let body = scene.rootNode.childNode(withName: "Body", recursively: true) else { return }
guard let rig = scene.rootNode.childNode(withName: "mixamorig_Hips", recursively: true) else { return }
mountNode.addChildNode(body)
mountNode.addChildNode(rig)

// add mount node
addChildNode(mountNode)

guard let animationUrl = Bundle.main.url(forResource: "art.scnassets/animations/falling", withExtension: "dae") else { return }
let src = SCNSceneSource(url: animationUrl, options: nil)
guard let animation = src?.entryWithIdentifier("mixamorig_Hips-anim", withClass: CAAnimation.self) else { return }

animation.fadeInDuration = 0.2
animation.fadeOutDuration = 0.2
animation.usesSceneTimeBase = false
animation.repeatCount = .greatestFiniteMagnitude

rig.addAnimation(animation, forKey: "current_animation")

问题在于动画不会使身体网格变形,它只会动画其位置和旋转。仅更新节点位置和旋转动画。我怀疑我遗漏了与SCNSkinner

相关的皮肤相关内容

请不要介意ScreenShot中的不同文件名和上面的代码,我只是想快速显示有关我的问题的信息。

提前感谢!

0 个答案:

没有答案