Вы можете группировать узлы самостоятельно и просто перемещать каждый узел в группе, когда вы перемещаете один, применяя одно и то же преобразование к каждому.
В терминах высокого уровня - создайте группу, или массив, или несколько своего рода коллекция для ваших узлов, все, что работает для вашего приложения.
Затем, когда вы хотите переместить группу, вы можете l oop через каждый узел и для каждого применить одно и то же преобразование - например, в приведенном ниже примере все будут иметь перевод (-0.05f, 0 , 0) apply:
//Looping over each node in your group
{
//For each node, get the current Pose and transform it then set a new anchor at the new pose
Session session = arFragment.getArSceneView().getSession();
Anchor nextAnchor = [Get the next anchor node in your array or group]
Pose oldPose = nextAnchor.getPose();
Pose newPose = oldPose.compose(Pose.makeTranslation(-0.05f,0,0));
movedAnchor = moveRenderable(currentSelectedAnchorNode, newPose);
[Update your array or collection or group with this 'new' movedAnchor]
}
Чтобы фактически переместить отдельные узлы, можно использовать код ниже. Это фактически удаляет узел в текущей позиции и воссоздает новый узел в целевой позиции:
private AnchorNode moveRenderable(AnchorNode anchorNodeToMove, Pose newPoseToMoveTo) {
//Move a renderable to a new pose
if (anchorNodeToMove != null) {
arFragment.getArSceneView().getScene().removeChild(anchorNodeToMove);
} else {
Log.d(TAG,"moveRenderable - anchorNodeToMove was null");
return null;
}
Frame frame = arFragment.getArSceneView().getArFrame();
Session session = arFragment.getArSceneView().getSession();
Anchor markAnchor = session.createAnchor(newPoseToMoveTo.extractTranslation());
AnchorNode newAnchorNode = new AnchorNode(markAnchor);
newAnchorNode.setRenderable(andyRenderable);
newAnchorNode.setParent(arFragment.getArSceneView().getScene());
return newAnchorNode;
}