Добавлен спринт, изменены параметры скорости персонажа

This commit is contained in:
MrTorex committed 2025-10-25 11:03:52 +03:00
1 parent ee7771acd9
commit ff095526bd
5 files changed
+36 -6

No files matched your search

@@ -15,6 +15,7 @@ namespace Code.Gameplay.Player
public CameraMode CameraMode; // Текущий режим камеры для адаптации поведения public CameraMode CameraMode; // Текущий режим камеры для адаптации поведения
public Vector3 CameraPlanarDirection; // Направление камеры в горизонтальной плоскости public Vector3 CameraPlanarDirection; // Направление камеры в горизонтальной плоскости
public bool JumpPressed; // Флаг указывающий, нажата ли кнопка прыжка public bool JumpPressed; // Флаг указывающий, нажата ли кнопка прыжка
public bool SprintPressed; // Флаг указывающий, нажата ли кнопка спринта
} }
/* /*
@@ -31,7 +32,8 @@ namespace Code.Gameplay.Player
[SerializeField] [SerializeField]
private float private float
maxStableMoveSpeed = 10f, // Максимальная скорость движения по устойчивой поверхности maxStableMoveSpeed = 8f, // Максимальная скорость движения по устойчивой поверхности
sprintMoveSpeed = 12f, // Максимальная скорость спринта
stableMovementSharpness = 15f, // Резкость изменения скорости движения (чем выше - тем резче) stableMovementSharpness = 15f, // Резкость изменения скорости движения (чем выше - тем резче)
orientationSharpness = 10f, // Резкость изменения вращения персонажа (чем выше - тем резче) orientationSharpness = 10f, // Резкость изменения вращения персонажа (чем выше - тем резче)
jumpSpeed = 10f; // Скорость прыжка jumpSpeed = 10f; // Скорость прыжка
@@ -48,10 +50,10 @@ namespace Code.Gameplay.Player
// Вращение камеры в FirstPerson режиме для синхронизации (только горизонтальная компонента) // Вращение камеры в FirstPerson режиме для синхронизации (только горизонтальная компонента)
private Quaternion _firstPersonCameraRotation; private Quaternion _firstPersonCameraRotation;
private bool private bool
_shouldApplyCameraRotation, // Флаг указывающий, что нужно применить вращение камеры к персонажу _shouldApplyCameraRotation, // Флаг указывающий, что нужно применить вращение камеры к персонажу
_jumpRequested; // Флаг указывающий, что был запрошен прыжок _jumpRequested, // Флаг указывающий, что был запрошен прыжок
_isSprinting; // Флаг указывающий, что активен режим спринта
// Инициализация контроллера // Инициализация контроллера
private void Start() private void Start()
@@ -66,6 +68,9 @@ namespace Code.Gameplay.Player
// Сохраняем текущий режим камеры // Сохраняем текущий режим камеры
_currentCameraMode = inputs.CameraMode; _currentCameraMode = inputs.CameraMode;
// Обработка спринта
_isSprinting = inputs is { SprintPressed: true, MoveAxisForward: > 0.1f }; // Спринт только при движении вперёд
// Нормализация вектора движения и ограничение его величины до 1 // Нормализация вектора движения и ограничение его величины до 1
var moveInputVector = var moveInputVector =
Vector3.ClampMagnitude(new Vector3(inputs.MoveAxisRight, 0, inputs.MoveAxisForward), 1f); Vector3.ClampMagnitude(new Vector3(inputs.MoveAxisRight, 0, inputs.MoveAxisForward), 1f);
@@ -209,8 +214,9 @@ namespace Code.Gameplay.Player
var reorientedInput = Vector3.Cross(effectiveGroundNormal, inputRight).normalized * var reorientedInput = Vector3.Cross(effectiveGroundNormal, inputRight).normalized *
_moveInputVector.magnitude; _moveInputVector.magnitude;
// Расчет целевой скорости движения с учетом ограничения максимальной скорости // Расчет целевой скорости движения с учетом ограничения максимальной скорости и спринта
var targetMovementVelocity = reorientedInput * maxStableMoveSpeed; var targetSpeed = _isSprinting ? sprintMoveSpeed : maxStableMoveSpeed;
var targetMovementVelocity = reorientedInput * targetSpeed;
// Плавная интерполяция текущей скорости к целевой с экспоненциальным сглаживанием // Плавная интерполяция текущей скорости к целевой с экспоненциальным сглаживанием
currentVelocity = Vector3.Lerp( currentVelocity = Vector3.Lerp(
@@ -58,6 +58,7 @@ public class Player : MonoBehaviour
inputs.MoveAxisForward = moveInput.y; // Vertical ось (W/S или Up/Down) inputs.MoveAxisForward = moveInput.y; // Vertical ось (W/S или Up/Down)
inputs.MoveAxisRight = moveInput.x; // Horizontal ось (A/D или Left/Right) inputs.MoveAxisRight = moveInput.x; // Horizontal ось (A/D или Left/Right)
inputs.JumpPressed = _inputService.JumpPressed; // Прыжки (Space) inputs.JumpPressed = _inputService.JumpPressed; // Прыжки (Space)
inputs.SprintPressed = _inputService.SprintPressed; // Спринт (Shift)
// Передаем информацию о камере для адаптивного поведения // Передаем информацию о камере для адаптивного поведения
inputs.CameraRotation = playerCamera.transform.rotation; inputs.CameraRotation = playerCamera.transform.rotation;
@@ -14,6 +14,7 @@ namespace Code.Input
// Для управления движением персонажа // Для управления движением персонажа
Vector2 MoveInput { get; } Vector2 MoveInput { get; }
bool JumpPressed { get; } bool JumpPressed { get; }
bool SprintPressed { get; }
// Для переключения режима камеры // Для переключения режима камеры
bool ToggleCameraModePressed { get; } bool ToggleCameraModePressed { get; }
@@ -13,6 +13,7 @@ namespace Code.Input
public float ZoomInput { get; private set; } public float ZoomInput { get; private set; }
public Vector2 MoveInput { get; private set; } public Vector2 MoveInput { get; private set; }
public bool JumpPressed { get; private set; } public bool JumpPressed { get; private set; }
public bool SprintPressed { get; private set; }
public bool ToggleCameraModePressed { get; private set; } public bool ToggleCameraModePressed { get; private set; }
public InputService(InputActionAsset inputActionAsset) public InputService(InputActionAsset inputActionAsset)
@@ -65,6 +66,14 @@ namespace Code.Input
jumpAction.canceled += OnJumpCanceled; jumpAction.canceled += OnJumpCanceled;
} }
// Обработка спринта (персонаж)
var sprintAction = gameplayMap.FindAction("Sprint");
if (sprintAction != null)
{
sprintAction.performed += OnSprintPerformed;
sprintAction.canceled += OnSprintCanceled;
}
// Обработка переключения режима камеры // Обработка переключения режима камеры
var toggleCameraModeAction = gameplayMap.FindAction("ToggleCameraMode"); var toggleCameraModeAction = gameplayMap.FindAction("ToggleCameraMode");
if (toggleCameraModeAction != null) if (toggleCameraModeAction != null)
@@ -114,6 +123,16 @@ namespace Code.Input
JumpPressed = false; JumpPressed = false;
} }
private void OnSprintPerformed(InputAction.CallbackContext context)
{
SprintPressed = true;
}
private void OnSprintCanceled(InputAction.CallbackContext context)
{
SprintPressed = false;
}
private void OnToggleCameraModePerformed(InputAction.CallbackContext context) private void OnToggleCameraModePerformed(InputAction.CallbackContext context)
{ {
ToggleCameraModePressed = true; ToggleCameraModePressed = true;
@@ -149,6 +168,9 @@ namespace Code.Input
gameplayMap.FindAction("Jump").performed -= OnJumpPerformed; gameplayMap.FindAction("Jump").performed -= OnJumpPerformed;
gameplayMap.FindAction("Jump").canceled -= OnJumpCanceled; gameplayMap.FindAction("Jump").canceled -= OnJumpCanceled;
gameplayMap.FindAction("Sprint").performed -= OnSprintPerformed;
gameplayMap.FindAction("Sprint").canceled -= OnSprintCanceled;
gameplayMap.FindAction("ToggleCameraMode").performed -= OnToggleCameraModePerformed; gameplayMap.FindAction("ToggleCameraMode").performed -= OnToggleCameraModePerformed;
gameplayMap.FindAction("ToggleCameraMode").canceled -= OnToggleCameraModeCanceled; gameplayMap.FindAction("ToggleCameraMode").canceled -= OnToggleCameraModeCanceled;
} }
@@ -362,7 +362,6 @@ MonoBehaviour:
minDistance: 3 minDistance: 3
maxDistance: 10 maxDistance: 10
distanceMovementSpeed: 5 distanceMovementSpeed: 5
distanceMovementSharpness: 100
rotationSpeed: 0.3 rotationSpeed: 0.3
rotationSharpness: 100 rotationSharpness: 100
followSharpness: 100 followSharpness: 100
@@ -987,6 +986,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::Code.Gameplay.Player.CharacterController m_EditorClassIdentifier: Assembly-CSharp::Code.Gameplay.Player.CharacterController
motor: {fileID: 1696686256} motor: {fileID: 1696686256}
maxStableMoveSpeed: 10 maxStableMoveSpeed: 10
sprintMoveSpeed: 15
stableMovementSharpness: 15 stableMovementSharpness: 15
orientationSharpness: 10 orientationSharpness: 10
jumpSpeed: 10 jumpSpeed: 10