Узлы SceneKit не меняют положение с корневым узлом сцены

Я использую SceneKit с ARKit, и сейчас у меня есть простое приложение, где я нажимаю на экран, и оно добавляет ARAnchor и SCNNode к моей сцене.

В какой-то момент я захочу переместить всю сцену, поэтому я попытался изменить sceneView.scene.rootNode.position.x += 10 чтобы проверить это. Если я вызываю это на каком-то конкретном узле, этот узел перемещается соответствующим образом. Но называя это rootNodeничего не происходит, и я ожидаю, что каждый дочерний узел (каждый узел в сцене) будет двигаться вместе с ним.

Почему другие мои узлы не двигаются должным образом, и я могу что-то сделать, чтобы это исправить? Или я думаю об этом неправильно?

1 ответ

Решение

Согласно документации для SCNScene.rootNode:

Вы не должны изменять transform свойство корневого узла.

Корневой узел определяет происхождение мировой системы координат - все остальные измерения относятся к нему. Следовательно, не имеет смысла (и часто проблематично) менять свою позицию, ориентацию, масштаб или любой другой аспект своего преобразования.

Если вы хотите переместить весь контент в вашей сцене SceneKit, создайте новый узел, который будет содержать все остальные, и измените преобразование этого узла. (Вы не можете сделать это для узлов, добавленных ARSCNViewпотому что ARKit делает этих прямых потомков корневого узла, но весь смысл в том, что они позиционируют их в мировом пространстве.)

Другие вопросы по тегам