Я пытаюсь оживить персонажа с помощью анимации, созданной с помощью Mixamo.
Проблема в том, что анимация костей персонажа не работает. Я могу видеть только анимацию вращения, но 3D-модель остается в Т-позе. Более того, положение и масштаб персонажа полностью меняются, когда я запускаю анимацию.
Вот код, который я использую для инициализации моего узла персонажа:
convenience init(folderPath: String, nodeName: String) {
let characterScene = SCNScene(named: folderPath)!
self.nodeRef = characterScene.rootNode.childNode(withName: nodeName, recursively: true)!
[...]
self.node.addChildNode(nodeRef)
self.node.scale = SCNVector3(SCALE, SCALE, SCALE)
self.node.eulerAngles = SCNVector3Make(0, (Float.pi/2) * 2, 0)
self.node.position = SCNVector3(0, Floor.RADIUS, 3.5)
}
А вот код для применения и запустите анимацию:
func startAnimation() {
runAnimation = loadAnimation(fromSceneNamed: "art.scnassets/Medieval/Running-fixed.dae")
runAnimation?.animationPlayer(forKey: "Run")?.play()
node.addAnimationPlayer(runAnimation!, forKey: "Run")
}
fileprivate func loadAnimation(fromSceneNamed sceneName: String) -> SCNAnimationPlayer {
let scene = SCNScene(named: sceneName)!
// find top level animation
var animationPlayer: SCNAnimationPlayer! = nil
scene.rootNode.enumerateChildNodes { (child, stop) in
if !child.animationKeys.isEmpty {
animationPlayer = child.animationPlayer(forKey: child.animationKeys[0])
stop.pointee = true
}
}
return animationPlayer
}
И в моей GameScene:
[...]
self.character = Character(folderPath: "art.scnassets/Medieval/character_worker.dae", nodeName: "characterWorker")
rootNode.addChildNode(self.character.node)
self.character.startAnimation()
[...]
Мне удалось анимировать персонажа с помощью файлов Collada, которые я нашел в Интернете, поэтому проблема, скорее всего, связана с один из моих файлов Collada.
Я использовал команду xmllint --format
в файле Mixamo и скрипт ConvertToXCodeCollada, чтобы перегруппировать все анимации в один, чтобы его можно было прочитать с помощью SceneKit.
Вот скриншот 3D-ресурса: Character.png и файл анимации: Animation.png .
Более того, похоже, что файл анимации не содержать текстуру, хотя я установил флажок «со скином» при экспорте анимации из Mixamo.