Revert "Инишиал добавление гравитации и прыжков, нуждается в доработке. Убраны неиспользуемые параметры"

This reverts commit ee7771acd9.
This commit is contained in:
ThomasCharester committed 2025-10-28 11:54:31 +03:00
1 parent 9cda28e03b
commit 95ceaaa680
7 files changed
+309 -97

No files matched your search

@@ -14,7 +14,6 @@ namespace Code.Gameplay.Player
public Quaternion CameraRotation; // Текущее вращение камеры для определения направления движения
public CameraMode CameraMode; // Текущий режим камеры для адаптации поведения
public Vector3 CameraPlanarDirection; // Направление камеры в горизонтальной плоскости
public bool JumpPressed; // Флаг указывающий, нажата ли кнопка прыжка
}
/*
@@ -33,12 +32,8 @@ namespace Code.Gameplay.Player
private float
maxStableMoveSpeed = 10f, // Максимальная скорость движения по устойчивой поверхности
stableMovementSharpness = 15f, // Резкость изменения скорости движения (чем выше - тем резче)
orientationSharpness = 10f, // Резкость изменения вращения персонажа (чем выше - тем резче)
jumpSpeed = 10f; // Скорость прыжка
orientationSharpness = 10f; // Резкость изменения вращения персонажа (чем выше - тем резче)
[SerializeField]
private Vector3 gravity = new(0, -30f, 0); // Вектор, отвечающий за применение гравитации
// Векторы движения и направления взгляда
private Vector3 _moveInputVector, _lookInputVector;
@@ -48,10 +43,8 @@ namespace Code.Gameplay.Player
// Вращение камеры в FirstPerson режиме для синхронизации (только горизонтальная компонента)
private Quaternion _firstPersonCameraRotation;
private bool
_shouldApplyCameraRotation, // Флаг указывающий, что нужно применить вращение камеры к персонажу
_jumpRequested; // Флаг указывающий, что был запрошен прыжок
// Флаг указывающий, что нужно применить вращение камеры к персонажу
private bool _shouldApplyCameraRotation;
// Инициализация контроллера
private void Start()
@@ -79,10 +72,6 @@ namespace Code.Gameplay.Player
{
HandleThirdPersonInputs(ref inputs, moveInputVector);
}
// При запрашивании прыжка
if (inputs.JumpPressed)
_jumpRequested = true;
}
// Обработка ввода для FirstPerson режима
@@ -191,51 +180,28 @@ namespace Code.Gameplay.Player
// Обновление скорости движения персонажа
public void UpdateVelocity(ref Vector3 currentVelocity, float deltaTime)
{
// Если персонаж находится на земле
if (motor.GroundingStatus.IsStableOnGround)
{
// Сохранение текущей величины скорости
var currentVelocityMagnitude = currentVelocity.magnitude;
// Сохранение текущей величины скорости
var currentVelocityMagnitude = currentVelocity.magnitude;
// Получение нормали поверхности для корректного движения по наклонным плоскостям
var effectiveGroundNormal = motor.GroundingStatus.GroundNormal;
// Переориентация текущей скорости вдоль поверхности
currentVelocity = motor.GetDirectionTangentToSurface(currentVelocity, effectiveGroundNormal) * currentVelocityMagnitude;
// Получение нормали поверхности для корректного движения по наклонным плоскостям
var effectiveGroundNormal = motor.GroundingStatus.GroundNormal;
// Переориентация текущей скорости вдоль поверхности
currentVelocity = motor.GetDirectionTangentToSurface(currentVelocity, effectiveGroundNormal) *
currentVelocityMagnitude;
// Переориентация входного вектора движения вдоль поверхности
var inputRight = Vector3.Cross(_moveInputVector, motor.CharacterUp);
var reorientedInput = Vector3.Cross(effectiveGroundNormal, inputRight).normalized *
_moveInputVector.magnitude;
// Расчет целевой скорости движения с учетом ограничения максимальной скорости
var targetMovementVelocity = reorientedInput * maxStableMoveSpeed;
// Плавная интерполяция текущей скорости к целевой с экспоненциальным сглаживанием
currentVelocity = Vector3.Lerp(
currentVelocity,
targetMovementVelocity,
1f - Mathf.Exp(-stableMovementSharpness * deltaTime)
);
// Если запрошен прыжок
if (_jumpRequested)
{
currentVelocity += motor.CharacterUp * jumpSpeed - Vector3.Project(currentVelocity, motor.CharacterUp);
_jumpRequested = false;
motor.ForceUnground();
}
}
// Если персонаж не находится на земле
else
{
// Применяем гравитацию
currentVelocity += gravity * deltaTime;
// Отменяем прыжок (фикс проблемы с двойным прыжком после приземления)
_jumpRequested = false;
}
// Переориентация входного вектора движения вдоль поверхности
var inputRight = Vector3.Cross(_moveInputVector, motor.CharacterUp);
var reorientedInput = Vector3.Cross(effectiveGroundNormal, inputRight).normalized * _moveInputVector.magnitude;
// Расчет целевой скорости движения с учетом ограничения максимальной скорости
var targetMovementVelocity = reorientedInput * maxStableMoveSpeed;
// Плавная интерполяция текущей скорости к целевой с экспоненциальным сглаживанием
currentVelocity = Vector3.Lerp(
currentVelocity,
targetMovementVelocity,
1f - Mathf.Exp(-stableMovementSharpness * deltaTime)
);
}
// Метод вызывается перед обновлением персонажа (можно использовать для подготовки)
@@ -57,7 +57,6 @@ public class Player : MonoBehaviour
var moveInput = _inputService.MoveInput;
inputs.MoveAxisForward = moveInput.y; // Vertical ось (W/S или Up/Down)
inputs.MoveAxisRight = moveInput.x; // Horizontal ось (A/D или Left/Right)
inputs.JumpPressed = _inputService.JumpPressed; // Прыжки (Space)
// Передаем информацию о камере для адаптивного поведения
inputs.CameraRotation = playerCamera.transform.rotation;
@@ -37,6 +37,9 @@ namespace Code.Gameplay.Player
// Скорость зума камеры
distanceMovementSpeed = 5f, // Множитель скорости изменения дистанции при зуме
// Скорость интерполяции текущая -> целевая позиция зума
distanceMovementSharpness = 100f, // Коэффициент плавности изменения дистанции (чем выше - тем резче)
// Скорость поворота камеры
rotationSpeed = 0.3f, // Множитель скорости вращения камеры