Инишиал механика наклона при залазании на стены

Нуждается в доработке (как минимум чтобы вращалось в правильную сторону), но вроде-как выглядит прикольно
This commit is contained in:
MrTorex committed 2025-10-29 15:00:25 +03:00
1 parent 07ce27618c
commit 0e188efe59
7 files changed
+170 -38

No files matched your search

@@ -14,15 +14,15 @@ namespace Code.Gameplay.Character.Controller.Abilities
// Минимальная горизонтальная скорость для начала залазания на стену
private readonly float _minWallClimbSpeed;
// Пороговый косинус стены
private readonly float _wallNormalThreshold;
public float WallNormalThreshold { get; }
// Конструктор механики залазания на стену
public WallClimbMechanic(float wallClimbSpeedFactor, float minWallClimbSpeed, float wallDetectionAngleThreshold)
{
_wallClimbSpeedFactor = wallClimbSpeedFactor;
_minWallClimbSpeed = minWallClimbSpeed;
// Преобразуем угол в косинус порога: если |dot| > cos(threshold), то это НЕ стена
_wallNormalThreshold = Mathf.Cos(Mathf.Deg2Rad * wallDetectionAngleThreshold);
WallNormalThreshold = Mathf.Cos(Mathf.Deg2Rad * wallDetectionAngleThreshold);
}
// Обработка столкновения при движении (вызывается при ударе о препятствие)
@@ -30,7 +30,7 @@ namespace Code.Gameplay.Character.Controller.Abilities
{
// Проверяем, что это вертикальная или почти вертикальная поверхность (стена)
var dotWithUp = Vector3.Dot(hitNormal, motor.CharacterUp);
if (Mathf.Abs(dotWithUp) > _wallNormalThreshold) return; // Не стена — это пол или потолок
if (Mathf.Abs(dotWithUp) > WallNormalThreshold) return; // Не стена — это пол или потолок
// Получаем текущую скорость персонажа
var currentVelocity = motor.Velocity;