From 307c62b62eab1a7b741459ad6868af1aae2eac6b Mon Sep 17 00:00:00 2001 From: aibrash Date: Tue, 27 Oct 2026 17:39:05 +0500 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=B2=D0=BE=D0=B4:=20=D0=B4=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20=D0=BD=D0=B0=20=D1=84=D0=B8?= =?UTF-8?q?=D0=B7=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D1=88=D0=B8=20(=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=B5=D1=82=20=D0=B2=20=D0=BB=D1=8E=D0=B1=D0=BE?= =?UTF-8?q?=D0=B9=20=D1=80=D0=B0=D1=81=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B5?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit W/A/S/D и стрелки, Пробел, Shift, C, Q — действия InputMap (move_*, jump, sprint, crouch, dash). Игрок использует их вместо is_key_pressed(KEY_*): на русской раскладке символ на клавише другой, а физическая клавиша та же. Сенсорные кнопки смогут нажимать те же действия. Co-Authored-By: Claude Sonnet 5.5 --- Player/character_body_3d.gd | 35 +++++++++++++---------------------- project.godot | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/Player/character_body_3d.gd b/Player/character_body_3d.gd index b6f175c..681617b 100644 --- a/Player/character_body_3d.gd +++ b/Player/character_body_3d.gd @@ -242,11 +242,10 @@ func _unhandled_input(event: InputEvent) -> void: head.rotate_x(-event.relative.y * MOUSE_SENSITIVITY * zoom_factor) head.rotation.x = clamp(head.rotation.x, deg_to_rad(-80), deg_to_rad(80)) - if event is InputEventKey and event.pressed and not event.echo: - if event.keycode == KEY_C: - _try_start_slide() # Подкат: бег (Shift) + C - elif event.keycode == KEY_Q: - _try_dash() # Рывок + if event.is_action_pressed("crouch"): + _try_start_slide() # Подкат: бег (sprint) + crouch + elif event.is_action_pressed("dash"): + _try_dash() # Битовые флаги состояния для сетевой синхронизации (см. Net.FLAG_*) func get_net_flags() -> int: @@ -258,16 +257,8 @@ func get_net_flags() -> int: return flags func _get_input_dir() -> Vector2: - var input_dir := Vector2.ZERO - if Input.is_key_pressed(KEY_D): - input_dir.x += 1 - if Input.is_key_pressed(KEY_A): - input_dir.x -= 1 - if Input.is_key_pressed(KEY_S): - input_dir.y += 1 - if Input.is_key_pressed(KEY_W): - input_dir.y -= 1 - return input_dir.normalized() + # Действия привязаны к физическим клавишам (работает в любой раскладке); у них же — сенсорные кнопки + return Input.get_vector("move_left", "move_right", "move_forward", "move_back") func _physics_process(delta: float) -> void: if is_dead: @@ -278,7 +269,7 @@ func _physics_process(delta: float) -> void: dash_cooldown_timer = maxf(dash_cooldown_timer - delta, 0.0) wallrun_cooldown_timer = maxf(wallrun_cooldown_timer - delta, 0.0) - var space_down := Input.is_key_pressed(KEY_SPACE) + var space_down := Input.is_action_pressed("jump") _update_crouch() @@ -369,12 +360,12 @@ func _physics_process(delta: float) -> void: var current_speed := WALK_SPEED if is_crouching: current_speed = CROUCH_WALK_SPEED - elif Input.is_key_pressed(KEY_SHIFT): + elif Input.is_action_pressed("sprint"): current_speed = SPRINT_SPEED # 4. Бег по стене if not is_wallrunning and not is_on_floor() and not is_sliding \ - and wallrun_cooldown_timer <= 0.0 and Input.is_key_pressed(KEY_W): + and wallrun_cooldown_timer <= 0.0 and Input.is_action_pressed("move_forward"): _try_start_wallrun() if is_wallrunning: _process_wallrun(delta) @@ -565,7 +556,7 @@ func _process_wallrun(delta: float) -> void: var horiz := Vector3(velocity.x, 0, velocity.z) if hit.is_empty() or wallrun_timer <= 0.0 or is_on_floor() \ - or not Input.is_key_pressed(KEY_W) \ + or not Input.is_action_pressed("move_forward") \ or horiz.length() < WALLRUN_MIN_SPEED * 0.6: _end_wallrun() return @@ -716,7 +707,7 @@ func _try_start_slide() -> void: return if not is_on_floor(): return - if not Input.is_key_pressed(KEY_SHIFT): + if not Input.is_action_pressed("sprint"): return var horizontal := Vector3(velocity.x, 0, velocity.z) @@ -760,10 +751,10 @@ func _process_slide(delta: float, direction: Vector3, horizontal: Vector3) -> Ve func _update_crouch() -> void: var busy := is_sliding or is_dashing or is_wallrunning or is_mantling or not is_on_floor() if not is_crouching: - if Input.is_key_pressed(KEY_C) and not busy: + if Input.is_action_pressed("crouch") and not busy: is_crouching = true _set_collider_crouched(true) - elif (busy or not Input.is_key_pressed(KEY_C)) and (is_sliding or _can_stand()): + elif (busy or not Input.is_action_pressed("crouch")) and (is_sliding or _can_stand()): _end_crouch() func _end_crouch() -> void: diff --git a/project.godot b/project.godot index 3a6221e..3caf891 100644 --- a/project.godot +++ b/project.godot @@ -25,6 +25,41 @@ MapLoader="*res://World/map_loader.gd" window/stretch/mode="canvas_items" window/stretch/aspect="expand" +[input] + +move_forward={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null), Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} +move_back={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null), Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} +move_left={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null), Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} +move_right={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null), Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} +jump={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} +sprint={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} +crouch={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} +dash={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)] +} + [physics] 3d/physics_engine="Jolt Physics"