небольшой фиксик (симка) воллрана
This commit is contained in:
1 parent
0fca1a32f9
commit
d2c5c45604
1 file changed
+20
-7
+20
-7
@@ -88,12 +88,25 @@ namespace Code.Gameplay.Character.Controller.Abilities
|
|||||||
var forwardInWallPlane = Vector3.ProjectOnPlane(_motor.CharacterForward, _wallNormal).normalized;
|
var forwardInWallPlane = Vector3.ProjectOnPlane(_motor.CharacterForward, _wallNormal).normalized;
|
||||||
if (forwardInWallPlane.sqrMagnitude < 0.01f)
|
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);
|
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;
|
_wallTangentUp = Vector3.Cross(_wallTangentRight, -_wallNormal).normalized;
|
||||||
|
|
||||||
_motor.ForceUnground();
|
_motor.ForceUnground();
|
||||||
@@ -189,13 +202,13 @@ namespace Code.Gameplay.Character.Controller.Abilities
|
|||||||
{
|
{
|
||||||
if (!IsWallRunning || !_motor) return;
|
if (!IsWallRunning || !_motor) return;
|
||||||
|
|
||||||
if (_motor.CharacterController is not CustomCharacterController controller || !controller.CanJump)
|
if (_motor.CharacterController is not CustomCharacterController { CanJump: true } controller)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IsWallRunning = false;
|
IsWallRunning = false;
|
||||||
|
|
||||||
var wallAway = _wallNormal;
|
var wallAway = _wallNormal;
|
||||||
var wallUp = _wallTangentUp;
|
var wallUp = Vector3.ProjectOnPlane(_motor.CharacterUp, _wallNormal).normalized;
|
||||||
|
|
||||||
var playerForward = cameraRotation * Vector3.forward;
|
var playerForward = cameraRotation * Vector3.forward;
|
||||||
|
|
||||||
@@ -204,8 +217,8 @@ namespace Code.Gameplay.Character.Controller.Abilities
|
|||||||
|
|
||||||
var jumpDirection =
|
var jumpDirection =
|
||||||
forwardInWallPlane * 0.2f +
|
forwardInWallPlane * 0.2f +
|
||||||
wallAway * 0.4f +
|
wallAway * 0.6f +
|
||||||
wallUp * 0.4f;
|
wallUp * 0.2f;
|
||||||
|
|
||||||
jumpDirection = jumpDirection.normalized;
|
jumpDirection = jumpDirection.normalized;
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user