Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
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.
Danke für Ihr Feedback!