在iOS 11中不推荐使用CAAnimation - 需要最近的答案吗?

时间:2017-09-24 19:08:08

标签: swift3 scenekit ios11 caanimation arkit

好的,我已经看过无处不在,我在这里尝试简单地从导入Xcode(或.scn,等等)的.dae中提取动画,这样我就可以在整个场景套件游戏中在模型上运行它。问题是所有引用的方法(包括此处Scenekit: Add animation to SCNNode from external Collada

似乎在iOS 11中已弃用。所以我无法为我放置在场景中的任何3D模型制作动画。

现在我能够显示模型 - 我从我的dae中获取模型并将其放入我的空白scn中:

if let d = modelScene.rootNode.childNodes.first
        {
            theDude.node = d
            theDude.setupNode() //this scales it down
        }
func setupNode()
    {
        node.scale = SCNVector3(x: modifier, y: modifier, z: modifier)
}

//Then add to scene on tap

let clone = theDude.node.clone()
            theDude.node = clone
            self.sceneView.scene.rootNode.addChildNode(theDude.node)
            theDude.node.position = hitPosition

这很有效。然而,试图让它运行我在Maya中添加到它的动画却没有。我按照Apple的例子将这些扩展添加到我的项目中: https://developer.apple.com/library/content/samplecode/Fox/Listings/Swift_Common_SceneKitExtensions_swift.html

正如它所说的那样尝试这样做,只是用一个立方体作为基本测试(来自上面的问题):

func addAnim()
    {
        let characterScene = SCNScene(named: "art.scnassets/cubeAnimatedSkeleton.dae")!
        let characterTopLevelNode = characterScene.rootNode.childNodes[0]
        sceneView.scene.rootNode.addChildNode(characterTopLevelNode)
        let idleAnimation = CAAnimation.animationWithSceneNamed("art.scnassets/cubeAnimatedSkeleton.dae")!

        idleAnimation.usesSceneTimeBase = false
        idleAnimation.repeatCount = Float.infinity
        characterTopLevelNode.addAnimation(idleAnimation, forKey: "idle")
    }

但是对于这个CAAnimation.animationWithSceneNamed("art.scnassets/cubeAnimatedSkeleton.dae")!,整个事情都不起作用,因为这是来自APPLE的扩展:

extension CAAnimation {
    class func animationWithSceneNamed(_ name: String) -> CAAnimation? {
        var animation: CAAnimation?
        if let scene = SCNScene(named: name) {
            scene.rootNode.enumerateChildNodes({ (child, stop) in
                if child.animationKeys.count > 0 {
                    animation = child.animation(forKey: child.animationKeys.first!) //ERROR

                    stop.initialize(to: true)
                }
            })
        }
        return animation
    }
}

表示在iOS 11中不推荐使用addAnimation for key。用animation = child.animationPlayer(forKey: child.animationKeys.first!)替换它并不起作用,我也不知道还能做什么。

这里有什么问题?

0 个答案:

没有答案