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 中。)
我正在将 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 中。)