【问题标题】:How can I access multiple animations in Swift?如何在 Swift 中访问多个动画?
【发布时间】:2019-05-04 20:23:57
【问题描述】:

Image of the file hierarchy in xcode of my animation file

问题:

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 中制作了骨骼动画,并使用 Maya 的 OpenCollada 扩展将动画导出到 COLLADA (.DAE) 文件。

我为模型和动画导出了单独的文件,因为如果我将它们导出为单个文件,则每次我尝试访问该文件以检查它是否注册任何动画时,我的动画都不会导出并且 xcode 崩溃。

我想访问我的动画文件的“实体”,这样我就可以循环、加载和附加动画,但我不能

我也研究过 GameKit,但是有没有办法用 SceneKit 做到这一点?

【问题讨论】:

    标签: ios swift xcode scenekit arkit


    【解决方案1】:

    绑定中的每个关节都有动画信息 最初我只得到第一个有动画的关节的信息,而不是它的也有动画的孩子

    即假设您的钻机层次结构是 臀部 > 右肩 > 手臂 > 肘 > 手腕

    你的动画是在肩膀、手臂、肘部和腕关节上

    没有你的髋关节有任何动画

    使用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()
    
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      相关资源
      最近更新 更多