@@ -599,6 +599,17 @@ int Node3DEditorViewport::get_selected_count() const {
599599 return count;
600600}
601601
602+ bool Node3DEditorViewport::_has_unlocked_selection () const {
603+ const List<Node *> &selection = editor_selection->get_top_selected_node_list ();
604+ for (Node *E : selection) {
605+ Node3D *sp = Object::cast_to<Node3D>(E);
606+ if (sp && !_is_node_locked (sp)) {
607+ return true ;
608+ }
609+ }
610+ return false ;
611+ }
612+
602613void Node3DEditorViewport::cancel_transform () {
603614 const List<Node *> &selection = editor_selection->get_top_selected_node_list ();
604615
@@ -2733,7 +2744,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
27332744 bool is_select_mode = (spatial_editor->get_tool_mode () == Node3DEditor::TOOL_MODE_TRANSFORM );
27342745 bool is_clicked_selected = editor_selection->is_selected (ObjectDB::get_instance<Node>(clicked));
27352746
2736- if (_edit.mode == TRANSFORM_NONE && (is_select_mode || is_clicked_selected)) {
2747+ if (_edit.mode == TRANSFORM_NONE && (is_select_mode || is_clicked_selected) && _has_unlocked_selection () ) {
27372748 _compute_edit (_edit.original_mouse_pos );
27382749 clicked = ObjectID ();
27392750 _edit.mode = TRANSFORM_TRANSLATE ;
@@ -3001,7 +3012,7 @@ void Node3DEditorViewport::_sinput(const Ref<InputEvent> &p_event) {
30013012 begin_transform (TRANSFORM_SCALE , true );
30023013 }
30033014 }
3004- if (ED_IS_SHORTCUT (" spatial_editor/collision_reposition" , event_mod) && editor_selection->get_top_selected_node_list ().size () == 1 && !collision_reposition) {
3015+ if (ED_IS_SHORTCUT (" spatial_editor/collision_reposition" , event_mod) && editor_selection->get_top_selected_node_list ().size () == 1 && !collision_reposition && _has_unlocked_selection () ) {
30053016 if (_edit.mode == TRANSFORM_NONE || _edit.instant ) {
30063017 if (_edit.mode == TRANSFORM_NONE ) {
30073018 _compute_edit (_edit.mouse_pos );
@@ -6161,6 +6172,10 @@ void Node3DEditorViewport::begin_transform(TransformMode p_mode, bool instant) {
61616172 }
61626173
61636174 if (get_selected_count () > 0 ) {
6175+ if (!_has_unlocked_selection ()) {
6176+ return ;
6177+ }
6178+
61646179 _edit.children_original_globals .clear ();
61656180
61666181 _edit.mode = p_mode;
@@ -8249,6 +8264,8 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
82498264
82508265 undo_redo->add_do_method (this , " _refresh_menu_icons" );
82518266 undo_redo->add_undo_method (this , " _refresh_menu_icons" );
8267+ undo_redo->add_do_method (this , " update_transform_gizmo" );
8268+ undo_redo->add_undo_method (this , " update_transform_gizmo" );
82528269 undo_redo->commit_action ();
82538270 } break ;
82548271 case MENU_UNLOCK_SELECTED : {
@@ -8270,6 +8287,8 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
82708287
82718288 undo_redo->add_do_method (this , " _refresh_menu_icons" );
82728289 undo_redo->add_undo_method (this , " _refresh_menu_icons" );
8290+ undo_redo->add_do_method (this , " update_transform_gizmo" );
8291+ undo_redo->add_undo_method (this , " update_transform_gizmo" );
82738292 undo_redo->commit_action ();
82748293 } break ;
82758294 case MENU_GROUP_SELECTED : {
0 commit comments