Animace 2+

This commit is contained in:
Dominik G.
2025-10-27 12:57:52 +01:00
parent e55827d9d0
commit 501312e0c2
3 changed files with 53 additions and 10 deletions

View File

@@ -734,6 +734,9 @@ MonoBehaviour:
gravity: -20
groundedGravity: -5
cameraTransform: {fileID: 6707832248248563092}
animator: {fileID: 9099213046038254594}
animationDamping: 0.075
crouchKey: 306
--- !u!114 &710593002191720509
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -939,7 +942,7 @@ MonoBehaviour:
m_EditorClassIdentifier: Assembly-CSharp::MegaKoop.Game.Networking.SteamLocalInputSender
characterNetwork: {fileID: 8235037133905039757}
sendInterval: 0.05
cameraTransform: {fileID: 0}
cameraTransform: {fileID: 6707832248248563092}
--- !u!114 &3442404066554451922
MonoBehaviour:
m_ObjectHideFlags: 0

View File

@@ -1947,8 +1947,12 @@ MonoBehaviour:
rotationSharpness: 15
airControlResponsiveness: 60
jumpHeight: 1.6
gravity: -1
gravity: -10
groundedGravity: -0.01
jumpBufferTime: 0.1
coyoteTime: 0.1
upwardGravityMultiplier: 1
fallGravityMultiplier: 10
cameraTransform: {fileID: 266386425542752718}
animator: {fileID: 3962868364137827229}
animationDamping: 0.075

View File

@@ -17,6 +17,10 @@ namespace MegaKoop.Game
[SerializeField] private float jumpHeight = 1.6f;
[SerializeField] private float gravity = -20f;
[SerializeField] private float groundedGravity = -5f;
[SerializeField, Range(0f, 0.3f)] private float jumpBufferTime = 0.1f;
[SerializeField, Range(0f, 0.3f)] private float coyoteTime = 0.1f;
[SerializeField, Min(0.5f)] private float upwardGravityMultiplier = 1f;
[SerializeField, Min(1f)] private float fallGravityMultiplier = 2.5f;
[Header("Camera Reference")]
[SerializeField] private Transform cameraTransform;
@@ -33,6 +37,8 @@ namespace MegaKoop.Game
private bool lastGrounded;
private bool isDead;
private MegaKoop.Game.Networking.ICharacterInputSource inputSource;
private float lastJumpPressedTime = float.NegativeInfinity;
private float lastTimeGrounded = float.NegativeInfinity;
// Animator parameter hashes
private int hashMoveX;
@@ -86,6 +92,8 @@ namespace MegaKoop.Game
InitializeAnimatorHashes();
Vector2 moveInput = ReadMovementInput();
TrackJumpInput();
Vector3 desiredMove = CalculateDesiredMove(moveInput);
bool hasMoveInput = desiredMove.sqrMagnitude > 0f;
@@ -192,39 +200,63 @@ namespace MegaKoop.Game
private void UpdateGroundedStateBeforeGravity()
{
if (isGrounded && verticalVelocity < 0f)
if (isGrounded)
{
verticalVelocity = groundedGravity;
lastTimeGrounded = Time.time;
}
}
private void HandleJumpInput()
{
if (!isGrounded)
bool bufferedJump = Time.time - lastJumpPressedTime <= jumpBufferTime;
bool coyoteAvailable = Time.time - lastTimeGrounded <= coyoteTime;
if (!bufferedJump)
{
return;
}
if (ShouldJumpThisFrame())
if (isGrounded || coyoteAvailable)
{
verticalVelocity = Mathf.Sqrt(jumpHeight * -2f * gravity);
isGrounded = false;
lastJumpPressedTime = float.NegativeInfinity;
}
}
private bool ShouldJumpThisFrame()
private void TrackJumpInput()
{
bool jumpPressed = false;
if (inputSource != null)
{
return inputSource.JumpPressed;
jumpPressed = inputSource.JumpPressed;
}
else if (Input.GetButtonDown("Jump"))
{
jumpPressed = true;
}
return Input.GetButtonDown("Jump");
if (jumpPressed)
{
lastJumpPressedTime = Time.time;
}
}
private void ApplyGravity()
{
verticalVelocity += gravity * Time.deltaTime;
float gravityMultiplier = verticalVelocity > 0f ? upwardGravityMultiplier : fallGravityMultiplier;
float currentGravity = gravity * gravityMultiplier;
if (isGrounded && verticalVelocity < 0f)
{
verticalVelocity = groundedGravity;
lastTimeGrounded = Time.time;
}
else
{
verticalVelocity += currentGravity * Time.deltaTime;
}
}
private void UpdateAnimator()
@@ -283,6 +315,10 @@ namespace MegaKoop.Game
gravity = Mathf.Min(-0.01f, gravity);
groundedGravity = Mathf.Clamp(groundedGravity, gravity, 0f);
animationDamping = Mathf.Max(0f, animationDamping);
jumpBufferTime = Mathf.Clamp(jumpBufferTime, 0f, 0.3f);
coyoteTime = Mathf.Clamp(coyoteTime, 0f, 0.3f);
upwardGravityMultiplier = Mathf.Max(0.5f, upwardGravityMultiplier);
fallGravityMultiplier = Mathf.Max(1f, fallGravityMultiplier);
EnsureAnimatorReference();
InitializeAnimatorHashes();
}