【问题标题】:Animate specific dae objects based on condition根据条件为特定的 dae 对象设置动画
【发布时间】:2021-02-22 20:18:39
【问题描述】:

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

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

提前致谢!

让 idleScene = SCNScene(named: "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 = 播放

【问题讨论】:

    标签: ios swift scenekit arkit


    【解决方案1】:

    通过显式命名 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)
    

    【讨论】:

      猜你喜欢
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多