небольшой фиксик (симка) воллрана

This commit is contained in:
MrTorex committed 2025-12-05 08:37:16 +03:00
1 parent 0fca1a32f9
commit d2c5c45604
1 file changed
+20 -7
@@ -88,12 +88,25 @@ namespace Code.Gameplay.Character.Controller.Abilities
var forwardInWallPlane = Vector3.ProjectOnPlane(_motor.CharacterForward, _wallNormal).normalized;
if (forwardInWallPlane.sqrMagnitude < 0.01f)
{
var fallbackRight = Vector3.Cross(_wallNormal, _wallTangentUp).normalized;
var candidateRight = Vector3.Cross(_wallNormal, _motor.CharacterUp);
candidateRight = Vector3.ProjectOnPlane(candidateRight, _wallNormal).normalized;
if (candidateRight.sqrMagnitude < 0.01f)
{
candidateRight = Vector3.Cross(_wallNormal, Vector3.up);
candidateRight = Vector3.ProjectOnPlane(candidateRight, _wallNormal).normalized;
}
if (candidateRight.sqrMagnitude < 0.01f)
{
candidateRight = Vector3.Cross(_wallNormal, Vector3.right).normalized;
}
var dotWithRight = Vector3.Dot(_motor.CharacterRight, _wallNormal);
forwardInWallPlane = dotWithRight < 0 ? fallbackRight : -fallbackRight;
forwardInWallPlane = dotWithRight < 0 ? candidateRight : -candidateRight;
}
_wallTangentRight = forwardInWallPlane;
_wallTangentRight = forwardInWallPlane.normalized;
_wallTangentUp = Vector3.Cross(_wallTangentRight, -_wallNormal).normalized;
_motor.ForceUnground();
@@ -189,13 +202,13 @@ namespace Code.Gameplay.Character.Controller.Abilities
{
if (!IsWallRunning || !_motor) return;
if (_motor.CharacterController is not CustomCharacterController controller || !controller.CanJump)
if (_motor.CharacterController is not CustomCharacterController { CanJump: true } controller)
return;
IsWallRunning = false;
var wallAway = _wallNormal;
var wallUp = _wallTangentUp;
var wallUp = Vector3.ProjectOnPlane(_motor.CharacterUp, _wallNormal).normalized;
var playerForward = cameraRotation * Vector3.forward;
@@ -204,8 +217,8 @@ namespace Code.Gameplay.Character.Controller.Abilities
var jumpDirection =
forwardInWallPlane * 0.2f +
wallAway * 0.4f +
wallUp * 0.4f;
wallAway * 0.6f +
wallUp * 0.2f;
jumpDirection = jumpDirection.normalized;