From d14f9c2a9fdd294017407b490f1149f9d0962e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C5=A1a=20Ceviel?= Date: Fri, 28 Nov 2025 09:45:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B0=D0=BD=D1=83=D1=81=20=D1=80=D0=B2=D1=91?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BD=D0=B5=20=D0=BF=D0=BE-=D0=B4=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Code/Configs/CharacterConfig.cs | 1 - .../Abilities/WallRunningMechanic.cs | 27 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs b/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs index e600519..dac0a0d 100644 --- a/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs +++ b/Game/CourierOld/Assets/Code/Configs/CharacterConfig.cs @@ -1,5 +1,4 @@ using UnityEngine; -using UnityEngine.Serialization; namespace Code.Configs { diff --git a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs index ebc55bf..fe12720 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/Abilities/WallRunningMechanic.cs @@ -97,21 +97,25 @@ namespace Code.Gameplay.Character.Controller.Abilities public void HandleWallRun(ref Vector3 currentVelocity, CharacterInputs inputs, float deltaTime) { if (!_isWallRunning) return; - - if (!IsWallStillPresent()) - { - DetachFromWall(false); - return; - } + if (!IsWallStillPresent()) { DetachFromWall(false); return; } Vector3 moveInputWorld = _inputHandler.MoveInputVector; + Vector3 moveInWallPlane = Vector3.ProjectOnPlane(moveInputWorld, _wallNormal); + + Vector3 wsMove = Vector3.Project(moveInWallPlane, _wallTangentRight); - Vector3 moveInWallPlane = Vector3.ProjectOnPlane(moveInputWorld, _wallNormal).normalized; + float ad = inputs.MoveAxisRight; - float inputMagnitude = moveInputWorld.magnitude; - moveInWallPlane *= inputMagnitude; + float sideDot = Vector3.Dot(_wallNormal, _motor.CharacterRight); + if (sideDot < 0) + ad = -ad; - Vector3 targetVelocity = moveInWallPlane * WallRunSpeed; + Vector3 adMove = _wallTangentUp * (-ad); + + Vector3 finalMove = wsMove + adMove; + finalMove = finalMove.normalized * moveInputWorld.magnitude; + + Vector3 targetVelocity = finalMove * WallRunSpeed; currentVelocity = Vector3.Lerp( currentVelocity, @@ -119,8 +123,7 @@ namespace Code.Gameplay.Character.Controller.Abilities 1f - Mathf.Exp(-WallRunAcceleration * deltaTime) ); - Vector3 gravity = Physics.gravity * WallRunGravityScale; - currentVelocity += gravity * deltaTime; + currentVelocity += Physics.gravity * WallRunGravityScale * deltaTime; float distanceToWall = Vector3.Dot(_motor.TransientPosition - _wallContactPoint, _wallNormal); if (Mathf.Abs(distanceToWall) > 0.8f)