diff --git a/editor/scene/3d/node_3d_editor_viewport.cpp b/editor/scene/3d/node_3d_editor_viewport.cpp index 46f174d157fc..b8250e3ae6ef 100644 --- a/editor/scene/3d/node_3d_editor_viewport.cpp +++ b/editor/scene/3d/node_3d_editor_viewport.cpp @@ -5441,12 +5441,10 @@ void Node3DEditorViewport::focus_aabb() { float required_distance = 0.0f; const List &selection = editor_selection->get_top_selected_node_list(); - if (selection.is_empty()) { - return; + if (!selection.is_empty()) { + focused_node_id = selection.front()->get()->get_instance_id(); } - focused_node_id = selection.front()->get()->get_instance_id(); - LocalVector stack; stack.reserve(selection.size()); for (Node *node : selection) { @@ -5469,6 +5467,19 @@ void Node3DEditorViewport::focus_aabb() { combined_aabb = combined_aabb.merge(global_aabb); } } + } else { + Node3D *node_3d = Object::cast_to(node); + if (node_3d) { + Vector3 pivot = node_3d->get_global_position(); + if (!aabb_valid) { + combined_aabb = AABB(pivot, Vector3()); + aabb_valid = true; + } else { + combined_aabb.expand_to(pivot); + } + } else { + continue; + } } for (Node *child : node->iterate_children()) {