2017-10-10 156 views

回答

1

我的建议是:

  • 静态:创建一个新的.scn文件,您可以在其中拖动&下载前夕您尝试分组的节点
  • 动态地:创建一个新的SCNNode。对于您尝试分组的每个节点,请使用.addChildNode方法

我使用第二个几次来使用ARKit构建动态场景。像魅力一样工作。

基本上,我说我的.dae文件的所有孩子的一个SCNNode:

var node = SCNNode() 
let scene = SCNScene(named: "myScene.dae") 
var nodeArray = scene.rootNode.childNodes 

for childNode in nodeArray { 
    node.addChildNode(childNode as SCNNode) 
} 

你应该给它与你的文件一试,用同样的方法.addChildNode :)

+0

请您分享一下动态方法的代码 –

+0

@Ankitgarg检查我的更新回答:) –

2

你创建一个父节点,然后将所有节点添加为子节点。

即:

var nodes: [SCNNode] = getMyNodes() 

var parentNode = SCNNode() 
parentNode.name = "chair" 

for node in nodes { 
    parentNode.addChildNodes(node) 
} 

当你申请一个更新的节点,更新也向下推给孩子,比如:

parentNode.transform = SCNMatrix4MakeTranslation(0, 0.5, 1.2) 

将在同一平移变换适用于所有孩子连接到parentNode

您可以通过访问特定的孩子:

parentNode.childNode(withName: nameOfChildNode, recursively: true) 

和使用得到任何孩子的父母:

myChildNode.parent 

编辑:

如果从一个场景文件导入,您仍然可以通过编程方式轻松访问节点:

let scene = SCNScene(named: "myScene.scn") 

func getMyNodes() -> [SCNNode] { 
    var nodes: [SCNNode] = [SCNNode]() 
    for node in scene.rootNode.childNodes { 
     nodes.append(node) 
    } 
    return nodes 
} 

顺便说一句,这意味着您可以忽略大部分上述内容,并使用作为parent节点。

相关问题