SceneKit 节点不会改变场景根节点的位置

SceneKit nodes aren't changing position with scene's root node

我正在将 SceneKit 与 ARKit 结合使用,现在有一个简单的应用程序,我可以在其中点击屏幕,它会向我的场景添加一个 ARAnchor 和一个 SCNNode。

在某些时候,我想要移动整个场景,所以我尝试更改 sceneView.scene.rootNode.position.x += 10 来测试这一点。如果我在任何特定节点上调用它,该节点确实会适当移动。但是在 rootNode 上调用它,没有任何反应,我希望每个子节点(场景中的每个节点)都随之移动。

为什么我的其他节点没有正确移动,我可以做些什么来解决这个问题?还是我想错了?

根据 SCNScene.rootNode 的文档:

You should not modify the transform property of the root node.

根节点定义了世界坐标系的原点——所有其他测量都是相对于它的。因此,改变它的位置、方向、比例或其变换的任何其他方面是没有意义的(而且通常是有问题的)。

如果您想移动 SceneKit 场景中的所有内容,请创建一个新节点以包含所有其他内容,然后更改该节点的变换。 (你不能对 ARSCNView 添加的节点执行此操作,因为 ARKit 使这些节点成为根节点的直接子节点,但它们的全部意义在于将它们定位在世界 space 中。)