2017-06-29 4 views
2

Ich verwende SceneKit mit ARKit und habe jetzt eine einfache App, wo ich auf den Bildschirm tippe und einen ARAnchor und einen SCNNode zu meiner Szene hinzufüge.SceneKit-Knoten ändern nicht die Position mit dem Wurzelknoten der Szene

Irgendwann möchte ich die gesamte Szene verschieben, also habe ich versucht, sceneView.scene.rootNode.position.x += 10 zu ändern, um dies zu testen. Wenn ich dies auf einem bestimmten Knoten anrufe, bewegt sich dieser Knoten entsprechend. Aber wenn ich dies auf rootNode anrufe, passiert nichts, wo ich erwarten würde, dass sich jeder Kindknoten (welcher jeder Knoten in der Szene ist) mit ihm bewegt.

Warum bewegen sich meine anderen Knoten nicht ordnungsgemäß, und kann ich etwas tun, um das Problem zu beheben? Oder denke ich darüber falsch?

Antwort

9

Pro die Dokumentation für SCNScene.rootNode:

Sie sollten nicht die transform Eigenschaft des Root-Knotens ändern.

Der Stammknoten definiert den Ursprung des Weltkoordinatensystems - alle anderen Messungen sind relativ dazu. Daher ist es nicht sinnvoll (und oft problematisch), seine Position, Ausrichtung, Skalierung oder irgendeinen anderen Aspekt seiner Transformation zu ändern.

Wenn Sie den gesamten Inhalt in Ihrer SceneKit-Szene verschieben möchten, erstellen Sie einen neuen Knoten, der alle anderen enthält, und ändern Sie die Transformation dieses Knotens. (Sie können dies nicht für Knoten tun, die von ARSCNView hinzugefügt wurden, da ARKit diese direkten untergeordneten Elemente des Wurzelknotens erstellt, aber der springende Punkt ist, dass sie im Weltbereich positioniert werden.)

Verwandte Themen