Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Spieleranimation Abschließen | Unity-Animationssystem
Kampfspiel in Unity

book
Spieleranimation Abschließen

Sprunganimation

Für den Sprung werden wir zwei Animationen haben: Da der Spieler springen und dann fallen wird, müssen wir dafür zwei Animationen erstellen. Der Übergang zwischen ihnen basiert auf der "y-Geschwindigkeit" des Spielers; wenn y positiv ist, springt er, und wenn y negativ ist, fällt er. Wir können die y-Geschwindigkeit aus der Rigidbody2D-Komponente erhalten, die am Spieler angebracht ist.

csharp
animator.SetFloat("JumpingForce", rb.velocity.y);

Dieser Code weist den Wert für den Übergangsparameter zwischen dem Sprung und dem Fall zu.

Code-Erklärung

csharp
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);
csharp
if (Input.GetKeyDown(KeyCode.Space) && isGrounded && animator.GetBool("isAttacking") == false)
{
// Code to execute when the conditions are met
}

Diese Zeile überprüft, ob die Leertaste gedrückt wird (Input.GetKeyDown(KeyCode.Space)), der Spieler am Boden ist (isGrounded) und der Spieler nicht gerade angreift (animator.GetBool("isAttacking") == false). Wenn alle Bedingungen erfüllt sind, wird der folgende Codeblock ausgeführt.

csharp
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);

Diese Zeile fügt der Rigidbody-Komponente (rb), die dem Spieler zugeordnet ist, eine Aufwärtskraft hinzu, um einen Sprung zu simulieren. Die angewandte Kraft ist in der Aufwärtsrichtung (Vector2.up) mit der durch jumpForce definierten Größe und wird impulsiv angewendet (ForceMode2D.Impulse).

csharp
animator.SetBool("isJumping", true);

Diese Zeile setzt einen booleschen Parameter "isJumping" im Animator-Komponente auf true, wodurch die Sprunganimation ausgelöst wird.

csharp
if (animator.GetBool("isJumping") == true && rb.velocity.y < 0 && isGrounded)
{
// Code to execute when the conditions are met
}

Diese Zeile überprüft, ob der Spieler derzeit springt (animator.GetBool("isJumping") == true), die vertikale Geschwindigkeit des Spielers negativ ist (rb.velocity.y < 0) und der Spieler auf dem Boden ist (isGrounded). Wenn alle Bedingungen erfüllt sind, wird der folgende Codeblock ausgeführt.

csharp
animator.SetBool("isJumping", false);

Diese Zeile setzt den booleschen Parameter "isJumping" im Animator-Komponente auf false, was anzeigt, dass der Spieler das Springen und Fallen beendet hat und seine Animation zu Idle wechselt.

csharp
isGrounded = Physics2D.Raycast(playerFeet.position, Vector2.down, 0.1f, groundLayer);

Diese Zeile wirft einen Strahl von der Position der Füße des Spielers (playerFeet.position) nach unten, um zu erkennen, ob der Spieler auf dem Boden steht. Sie gibt true zurück, wenn der Strahl innerhalb einer Entfernung von 0,1 Einheiten mit einem Collider in der Bodenschicht kollidiert und aktualisiert entsprechend die Variable (isGrounded).

question mark

Was stellt ein raycast in Unity dar?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 6
some-alt