2017-10-10 77 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節點。

相關問題