Добавлен спринт, изменены параметры скорости персонажа
This commit is contained in:
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
|
||||||
|
|||||||
Reference in new issue
Block a user