Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
Spieleranimation Abschließen
Sprunganimation
Für den Sprung werden wir zwei Animationen verwenden: Da der Spieler springt und dann fällt, müssen wir dafür zwei Animationen erstellen. Der Übergang zwischen ihnen basiert auf der „y-Geschwindigkeit“ des Spielers; ist y positiv, springt er, ist y negativ, fällt er. Die y-Geschwindigkeit erhalten wir aus der Rigidbody2D-Komponente, die dem Spieler zugeordnet ist.
animator.SetFloat("JumpingForce", rb.velocity.y);
Dieser Code weist den Wert für den Übergangsparameter zwischen Sprung und Fall zu.
Code-Erklärung
if (Input.GetKeyDown(KeyCode.Space) && isGrounded && animator.GetBool("isAttacking") == false)
{
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
animator.SetBool("isJumping", true);
}
if (animator.GetBool("isJumping") == true && rb.velocity.y < 0 && isGrounded)
{
animator.SetBool("isJumping", false);
}
animator.SetFloat("JumpingForce", rb.velocity.y);
isGrounded = Physics2D.Raycast(playerFeet.position, Vector2.down, 0.1f, groundLayer);
if (Input.GetKeyDown(KeyCode.Space) && isGrounded && animator.GetBool("isAttacking") == false)
{
// Code to execute when the conditions are met
}
Diese Zeile prüft, ob die Leertaste gedrückt wird (Input.GetKeyDown(KeyCode.Space)
), der Spieler sich am Boden befindet (isGrounded
) und der Spieler aktuell nicht angreift (animator.GetBool("isAttacking") == false
). Wenn alle Bedingungen erfüllt sind, wird der folgende Codeblock ausgeführt.
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
Diese Zeile fügt der am Spieler angebrachten Rigidbody-Komponente (rb
) eine Aufwärtskraft hinzu und simuliert so einen Sprung. Die angewendete Kraft wirkt in Aufwärtsrichtung (Vector2.up
) mit der durch jumpForce
definierten Stärke und wird impulsiv angewendet (ForceMode2D.Impulse
).
animator.SetBool("isJumping", true);
Diese Zeile setzt einen booleschen Parameter "isJumping" in der Animator-Komponente auf true und löst damit die Sprunganimation aus.
if (animator.GetBool("isJumping") == true && rb.velocity.y < 0 && isGrounded)
{
// Code to execute when the conditions are met
}
Diese Zeile prüft, ob der Spieler aktuell springt (animator.GetBool("isJumping") == true
), die vertikale Geschwindigkeit des Spielers negativ ist (rb.velocity.y < 0
) und der Spieler den Boden berührt (isGrounded
). Wenn alle Bedingungen erfüllt sind, wird der nachfolgende Codeblock ausgeführt.
animator.SetBool("isJumping", false);
Diese Zeile setzt den booleschen Parameter "isJumping" in der Animator-Komponente auf false, was anzeigt, dass der Spieler das Springen und Fallen beendet hat und seine Animation auf Idle wechselt.
isGrounded = Physics2D.Raycast(playerFeet.position, Vector2.down, 0.1f, groundLayer);
Diese Zeile sendet einen Strahl von der Position der Spielerfüße (playerFeet.position
) nach unten, um zu erkennen, ob der Spieler den Boden berührt. Sie gibt true zurück, wenn der Strahl innerhalb einer Distanz von 0,1 Einheiten mit einem Collider in der Bodenschicht kollidiert und aktualisiert entsprechend die Variable isGrounded
.
Danke für Ihr Feedback!