对于场景中的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 =播放
答案 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)