根据条件对特定的dae对象进行动画处理

时间:2020-11-10 20:52:42

标签: ios swift scenekit arkit

对于场景中的2个dae对象,如何在不同条件下为每个对象启动动画?

由于所有对象都是SCNScene的一部分,因此我无法根据条件引用单个对象。它们都可以正确渲染,但是它们可以同时进行动画处理。我们可以设置条件以使场景中的特定对象一次动画吗?

谢谢!

letdleScene = SCNScene(名称:“ art.scnassets / Avatar_1.dae”)!

    // This node will be parent of all the animation models
    let node = SCNNode()

    // Add all the child nodes to the parent node
    for child in idleScene.rootNode.childNodes {
        node.addChildNode(child)
    }

    // Set up some properties
    node.position = SCNVector3(hitTestResult.worldTransform.columns.3.x+0.5,hitTestResult.worldTransform.columns.3.y, hitTestResult.worldTransform.columns.3.z)
    node.scale = SCNVector3(0.2, 0.2, 0.2)
    // Add the node to the scene
    sceneView.scene.rootNode.addChildNode(node)

对于另一个化身(Avatar_2.dae),我们如何将其添加到场景中,但要提供另一个参考名称。

我们还应该如何分别播放/暂停每个化身的动画?

这是一个场景,但是是否有一个单独的化身?

sceneView.scene.isPaused =播放

1 个答案:

答案 0 :(得分:0)

通过在SCNScene中显式命名元素,然后使用rootNode.childNode(withName:)将它们指定为不同的节点:

   let scannerScene = SCNScene(named: "Scanner.scn")
   let sectorField: SCNNode = (scannerScene?.rootNode.childNode(withName: "sectorField", recursively: true))! 
   let scanBeam: SCNNode = (scannerScene?.rootNode.childNode(withName: "scanBeam", recursively: true))! 

完成此操作后,可以独立设置各个节点的动画:

// start scanBeam
    let rotateAction = SCNAction.rotateBy(x: 0, y: CGFloat(2*Float.pi), z: 0, duration: 1.5)
    let perpetualRotation = SCNAction.repeatForever(rotateAction)
    scanBeam.runAction(perpetualRotation)

要停止特定的动画(而不是整个场景中的所有动画),只需删除动作

scanBeam.removeAction(forKey: String)