SCNAnimationPlayer () Похоже, что при использовании SceneKit воспроизводится только небольшая часть анимации - PullRequest
0 голосов
/ 30 мая 2020

Я сделал анимацию в Blender и переместил ее в Xcode, и она преобразуется из файла .dae в .scn с помощью Xcode.

Я могу воспроизвести анимацию в графе сцены Xcode, как она разработана Blender.

Я загружаю геометрию и анимацию и создаю узел для анимированного объекта.

Я использую SCNAnimationPlayer () для загрузки анимации. Код ниже.

let scene = SCNScene(named: "scene.scn")!
let geometry = scene.rootNode.childNode(withName: "animatedGeo",
                                              recursively:true).geometry!

let animationNode = SCNNode(geometry: geometry)


let armature = scene.rootNode.childNode(withName: "Armature", recursively: true)!
let animationPlayer = armature.animationPlayer(forKey: "action_container-Armature")!
animationNode.addAnimationPlayer(animationPlayer, forKey: "action_container-Armature")

rootNode.addChildNode(animationNode)

Я не устанавливал ничего для animationPlayer программно, потому что все настройки выглядят нормально в окне графа сцены Xcode.

Однако, когда сцена загружена, я вижу небольшое движение на анимированный объект на экране iPhone. Похоже, что частично воспроизводится только первая (родительская) анимация кости. Я не мог найти, почему не воспроизводилась вся анимация, поскольку она воспроизводится в графе сцены.

1 Ответ

0 голосов
/ 01 июня 2020

Да, я нашел, как это сделать, когда пытался программно управлять своим объектом, созданным и анимированным в Blender, вместо анимации, созданной в Blender.

Что вам нужно сделать, так это добавить "Armature" узел к узлу сцены. Это все. Вам не нужно использовать SCNAnimationPlayer ().

let scene = SCNScene(named: "scene.scn")!

let myObjectArmaturNode = scene.rootNode.childNode(withName: "Armature", recursively: true)!

rootNode.addChildNode(myObjectArmaturNode)

Вот и все. Анимация работает так, как будто она разработана в Blender. Кстати, анимация состоит из 4-х костей.

...