Как я могу получить доступ к нескольким анимациям в Swift? - PullRequest
0 голосов
/ 03 декабря 2018

Изображение иерархии файлов в xcode моего файла анимации

Проблема:

xcode распознает несколько анимаций для одной Collada (.dae) файл.Но я не могу найти документацию о том, как получить доступ к этим анимациям напрямую.Я попытался использовать пример игры с лисами, но он загружает только одну из анимаций.

Вот мой код:

let modelNode = self.addModel_DAE_return(x: 0, y: 0, z: 0, scaleFactor: 0.0005, fileName: "models.scnassets/export_014/export_014_model.dae")

// add the animation to the model

let modelAnim = self.loadAnim_DAE(fileName: "models.scnassets/export_014/export_014_anim.dae")
                modelNode.addAnimationPlayer(modelAnim, forKey: "headMove")

modelAnim.play()

// add the model to the scene
node.addChildNode(modelNode)

Как получить доступ изагрузить другие анимации?

Контекст:

Я создаю приложение AR.Я использую пример Apple Image Recognition в качестве основы.

Вот ссылка на него: https://developer.apple.com/documentation/arkit/recognizing_images_in_an_ar_experience

Я анимировал скелет в Maya и экспортировал анимацию в файл COLLADA (.DAE), используя расширение OpenCollada для Maya.

Я экспортировал отдельные файлы для модели и анимации, потому что, если я экспортирую их как один файл, ни одна из моих анимаций не экспортируется и xcode не падает каждый раз, когда я пытаюсь получить доступ к файлу, чтобы проверить, регистрирует ли он какие-либо анимации.

Я хочу получить доступ к «сущностям» моего файла анимации, чтобы я мог просто зацикливаться, загружать и прикреплять анимации, но я не могу

, также я посмотрел на GameKit, но этоЕсть ли способ сделать это с SceneKit?

1 Ответ

0 голосов
/ 03 декабря 2018

Каждое соединение в буровой установке имеет информацию об анимации. Первоначально я получал информацию только о первом соединении, на котором были анимации, а не о его дочерних элементах, к которым также прикреплены анимации

, т. Е. Предположим, что ваша иерархия буровой установки - бедра>rightShoulder> рука> локоть> запястье

и ваши анимации были на суставах плеча, руки, локтя и запястья

у вас нет анимации на вашем тазобедренном суставе

при использовании enumerateChildNodes будет захватывать информацию только из плечевого сустава

при использовании enumerateHierarchy будет захватывать всю анимационную информацию из плеча, локтя и запястного сустава

см. Ниже для моей функции, которую я использовал: обратите внимание, что я отдельно загрузил и сохранил свою 3D-модель на SCNNode и был передан, чтобы я мог прикрепить к ней анимацию

func loadAttachAnim_DAE(fileName: String, modelNode: SCNNode){
        let scene = SCNScene(named: fileName)!

        //find top level animation
        var animationPlayer: SCNAnimationPlayer! = nil


        scene.rootNode.enumerateHierarchy{ (child, stop)  in
            if !child.animationKeys.isEmpty {
                print ("child = \(child) -----------------")
                animationPlayer = child.animationPlayer(forKey: child.animationKeys[0])

                modelNode.addAnimationPlayer(animationPlayer, forKey: "\(child)")
                animationPlayer.play()

            }
        }
    }
...