Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
Spielerinteraktion mit Objekten
Schnittstellen
Eine Schnittstelle ist wie ein Vertrag, der eine Reihe von Methoden und Eigenschaften definiert, die eine Klasse implementieren muss. Sie ermöglicht es, festzulegen, über welche Funktionalitäten eine Klasse verfügen soll, ohne die Implementierungsdetails bereitzustellen.
Beispiel
Angenommen, Sie entwickeln ein Spiel in Unity und möchten verschiedene Waffentypen wie Schwerter, Gewehre und Bögen erstellen. Sie könnten eine Schnittstelle namens IWeapon
definieren, die die grundlegenden Aktionen beschreibt, die jede Waffe ausführen können sollte, wie zum Beispiel Attack()
und Reload()
.
Nun muss jede Klasse, die im Spiel als Waffe gelten soll, diese Schnittstelle implementieren. Beispielsweise könnten Sie eine Klasse Sword
oder eine Klasse Gun
haben.
Durch die Verwendung von Schnittstellen kann sichergestellt werden, dass alle Waffen über die gleiche Grundfunktionalität verfügen (Attack()
und Reload()
), wobei jede Waffe ihre eigene spezifische Implementierung haben kann. Dies macht den Code modularer und leichter zu verwalten, insbesondere wenn die Komplexität des Spiels zunimmt.
Dies ist die Schnittstelle, die in unserem Spiel verwendet wurde, um Gegner als Objekte zu kennzeichnen, die angegriffen werden können.
public interface IGetAttacked
{
public void GetAttacked(int damage);
}
TryGetComponent
if (rayCastHit.transform.TryGetComponent(out IGetAttacked getAttacked))
{
getAttacked.GetAttacked(damage);
attackEffect.transform.position = rayCastHit.point;
attackEffect.Play();
isAttacking = false;
}
Wichtige Punkte
raycastHit
: Bezieht sich auf das Ergebnis eines Raycast-Treffers. Beim Ausführen eines Raycasts in Unity erhält man Informationen darüber, welches Objekt getroffen wurde;.TryGetComponent(out IGetAttacked getAttacked)
: Diese Methode versucht, eine bestimmte Komponente vom Transform desGameObject
abzurufen. Das Schlüsselwortout
weist die abgerufene Komponente der VariablengetAttacked
zu, falls erfolgreich. Andernfalls wird alles unterhalb dieserif
-Anweisung ignoriert;IGetAttacked
: Dies ist der Schnittstellentyp, den der Code vomGameObject
abzurufen versucht. Es gibt an, dass dasGameObject
eine Komponente besitzen muss, die das InterfaceIGetAttacked
implementiert.
Wenn das vom Raycast getroffene GameObject
eine Komponente besitzt, die das Interface IGetAttacked
implementiert, hält die Variable getAttacked
nach Ausführung dieser Zeile eine Referenz auf diese Komponente. Andernfalls wird getAttacked
auf null gesetzt.
Danke für Ihr Feedback!