Узлы SceneKit не меняют положение с корневым узлом сцены
Я использую SceneKit с ARKit, и сейчас у меня есть простое приложение, где я нажимаю на экран, и оно добавляет ARAnchor и SCNNode к моей сцене.
В какой-то момент я захочу переместить всю сцену, поэтому я попытался изменить sceneView.scene.rootNode.position.x += 10
чтобы проверить это. Если я вызываю это на каком-то конкретном узле, этот узел перемещается соответствующим образом. Но называя это rootNode
ничего не происходит, и я ожидаю, что каждый дочерний узел (каждый узел в сцене) будет двигаться вместе с ним.
Почему другие мои узлы не двигаются должным образом, и я могу что-то сделать, чтобы это исправить? Или я думаю об этом неправильно?
1 ответ
Согласно документации для SCNScene.rootNode:
Вы не должны изменять
transform
свойство корневого узла.
Корневой узел определяет происхождение мировой системы координат - все остальные измерения относятся к нему. Следовательно, не имеет смысла (и часто проблематично) менять свою позицию, ориентацию, масштаб или любой другой аспект своего преобразования.
Если вы хотите переместить весь контент в вашей сцене SceneKit, создайте новый узел, который будет содержать все остальные, и измените преобразование этого узла. (Вы не можете сделать это для узлов, добавленных ARSCNView
потому что ARKit делает этих прямых потомков корневого узла, но весь смысл в том, что они позиционируют их в мировом пространстве.)