Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Spielerangriffe | Spielerverhalten
Kampfspiel in Unity
course content

Kursinhalt

Kampfspiel in Unity

Kampfspiel in Unity

1. Unity-Animationssystem
2. Spielerverhalten
3. Feindverhalten
4. Spiel Verbessern
5. Verbessere das Flappy Bird Spiel

book
Spielerangriffe

Gizmos

private void OnDrawGizmos()
{
    Gizmos.DrawLine(transform.position, ((Vector2)transform.position + 4f * Vector2.right * localScale.x));
}
  • private void OnDrawGizmos(): Methodendeklaration für den OnDrawGizmos-Callback, zeigt an, dass Unity diese Methode automatisch aufruft, wenn Gizmos zur Visualisierung in der Szenenansicht gezeichnet werden;
  • Gizmos.DrawLine(...): Zeichnet eine Linie mithilfe von Gizmos. Es werden zwei Punkte als Argumente übergeben, um die Linie zu definieren;
  • transform.position: Repräsentiert die aktuelle Position des GameObjects, an das dieses Skript angehängt ist;
  • ((Vector2)transform.position + 4f * Vector2.right * localScale.x): Berechnet den zweiten Punkt der Linie. Es nimmt die aktuelle Position des GameObjects (transform.position) und addiert einen Vektor, der 4 Einheiten nach rechts zeigt (4f * Vector2.right). localScale.x wird verwendet, um die Länge und Richtung der Linie basierend auf der Skalierung des GameObjects in x-Richtung anzupassen.

Insgesamt zeichnet dieser Code eine Linie in der Szenenansicht von der aktuellen Position des GameObject zu einem Punkt, der 4 Einheiten nach rechts liegt, wobei die Länge und Richtung anhand der Skalierung des GameObject in x-Richtung angepasst werden. Wir verwenden dies, um jede Angriffsreichweite des Spielers zu visualisieren.

Angriffsskript

bool isAttacking;
float range;
[SerializeField] LayerMask enemyLayer;

private void Start()
{
    isAttacking = false;
    range = 0f;
}

public void StartAttacking(float attackRange)
{
    isAttacking = true;
    range = attackRange;
}

public void EndAttacking()
{
    isAttacking = false;
    range = 0f;
}

private void Update()
{
    if (isAttacking)
    {
        RaycastHit2D rayCastHit = Physics2D.Raycast(transform.position, Vector2.right * transform.localScale.x, range, enemyLayer);
        if (rayCastHit)
        {
            Debug.Log(rayCastHit.transform.name);
            isAttacking = false;
        }
    }
}

Beim Auslösen des Angriffs wird die Funktion StartAttacking aufgerufen, die die Reichweite des Angriffs als Parameter erhält. Da jeder Angriff eine unterschiedliche Reichweite besitzt, wird der Angriff gestartet und die Reichweite entsprechend gesetzt.

In der Funktion Update wird beim Angriff des Spielers ein RayCast erzeugt, der vom Spieler ausgeht, sich in die Blickrichtung des Spielers bewegt, eine Distanz entsprechend der Angriffsreichweite hat und ausschließlich das enemyLayer filtert.

Wenn wir einen Gegner treffen, geben wir vorerst seinen Namen im Debug-Modus aus. In Zukunft werden wir jedoch seine Lebenspunkte abrufen und ihn angreifen. Zusätzlich verfügen wir über eine EndAttacking-Funktion, die unseren Angriff abschließt.

Animationsereignisse

Ereignisse hinzufügen

Im Animationsfenster von Unity können Sie Animationsereignisse zu Animationsclips an bestimmten Frames hinzufügen. Klicken Sie mit der rechten Maustaste auf die Animationskurve oder den Keyframe, um ein Animationsereignis hinzuzufügen, und geben Sie die Funktion sowie optionale Parameter an.

Definition von Funktionen

Funktionen, die von Animation Events aufgerufen werden sollen, müssen öffentlich sein. Das Animation Event-System von Unity unterstützt optionale Float- und String-Parameter und ruft automatisch die angegebenen Funktionen während der Animation ab, um Animationen mit der Spiellogik zu synchronisieren und verschiedene Aktionen auszulösen.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Kampfspiel in Unity

Kampfspiel in Unity

1. Unity-Animationssystem
2. Spielerverhalten
3. Feindverhalten
4. Spiel Verbessern
5. Verbessere das Flappy Bird Spiel

book
Spielerangriffe

Gizmos

private void OnDrawGizmos()
{
    Gizmos.DrawLine(transform.position, ((Vector2)transform.position + 4f * Vector2.right * localScale.x));
}
  • private void OnDrawGizmos(): Methodendeklaration für den OnDrawGizmos-Callback, zeigt an, dass Unity diese Methode automatisch aufruft, wenn Gizmos zur Visualisierung in der Szenenansicht gezeichnet werden;
  • Gizmos.DrawLine(...): Zeichnet eine Linie mithilfe von Gizmos. Es werden zwei Punkte als Argumente übergeben, um die Linie zu definieren;
  • transform.position: Repräsentiert die aktuelle Position des GameObjects, an das dieses Skript angehängt ist;
  • ((Vector2)transform.position + 4f * Vector2.right * localScale.x): Berechnet den zweiten Punkt der Linie. Es nimmt die aktuelle Position des GameObjects (transform.position) und addiert einen Vektor, der 4 Einheiten nach rechts zeigt (4f * Vector2.right). localScale.x wird verwendet, um die Länge und Richtung der Linie basierend auf der Skalierung des GameObjects in x-Richtung anzupassen.

Insgesamt zeichnet dieser Code eine Linie in der Szenenansicht von der aktuellen Position des GameObject zu einem Punkt, der 4 Einheiten nach rechts liegt, wobei die Länge und Richtung anhand der Skalierung des GameObject in x-Richtung angepasst werden. Wir verwenden dies, um jede Angriffsreichweite des Spielers zu visualisieren.

Angriffsskript

bool isAttacking;
float range;
[SerializeField] LayerMask enemyLayer;

private void Start()
{
    isAttacking = false;
    range = 0f;
}

public void StartAttacking(float attackRange)
{
    isAttacking = true;
    range = attackRange;
}

public void EndAttacking()
{
    isAttacking = false;
    range = 0f;
}

private void Update()
{
    if (isAttacking)
    {
        RaycastHit2D rayCastHit = Physics2D.Raycast(transform.position, Vector2.right * transform.localScale.x, range, enemyLayer);
        if (rayCastHit)
        {
            Debug.Log(rayCastHit.transform.name);
            isAttacking = false;
        }
    }
}

Beim Auslösen des Angriffs wird die Funktion StartAttacking aufgerufen, die die Reichweite des Angriffs als Parameter erhält. Da jeder Angriff eine unterschiedliche Reichweite besitzt, wird der Angriff gestartet und die Reichweite entsprechend gesetzt.

In der Funktion Update wird beim Angriff des Spielers ein RayCast erzeugt, der vom Spieler ausgeht, sich in die Blickrichtung des Spielers bewegt, eine Distanz entsprechend der Angriffsreichweite hat und ausschließlich das enemyLayer filtert.

Wenn wir einen Gegner treffen, geben wir vorerst seinen Namen im Debug-Modus aus. In Zukunft werden wir jedoch seine Lebenspunkte abrufen und ihn angreifen. Zusätzlich verfügen wir über eine EndAttacking-Funktion, die unseren Angriff abschließt.

Animationsereignisse

Ereignisse hinzufügen

Im Animationsfenster von Unity können Sie Animationsereignisse zu Animationsclips an bestimmten Frames hinzufügen. Klicken Sie mit der rechten Maustaste auf die Animationskurve oder den Keyframe, um ein Animationsereignis hinzuzufügen, und geben Sie die Funktion sowie optionale Parameter an.

Definition von Funktionen

Funktionen, die von Animation Events aufgerufen werden sollen, müssen öffentlich sein. Das Animation Event-System von Unity unterstützt optionale Float- und String-Parameter und ruft automatisch die angegebenen Funktionen während der Animation ab, um Animationen mit der Spiellogik zu synchronisieren und verschiedene Aktionen auszulösen.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 2. Kapitel 3
some-alt