Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
Partikel Hinzufügen
Erklärung der Änderungen an der Update-Methode
private void Update()
{
stateManager.UpdateStates(Time.deltaTime);
scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;
}
Die Update
-Methode im Enemy-Skript enthält nun Logik, um den StateManager zu aktualisieren, sicherzustellen, dass der Gegner dem Spieler zugewandt ist, und einen speziellen Fall zu behandeln, in dem sich der Gegner im DeathState
befindet. Diese Logik wurde hinzugefügt, um zu verhindern, dass der Gegner dem Spieler weiterhin zugewandt bleibt, nachdem er gestorben ist.
Komponenten der Methode
StateManager-Update
stateManager.UpdateStates(Time.deltaTime)
Diese Zeile aktualisiert den StateManager und übergibt die seit dem letzten Frame vergangene Zeit (Time.deltaTime
). Sie stellt sicher, dass der aktuelle Zustand in jedem Frame korrekt aktualisiert wird.
DeathState-Prüfung
if (stateManager.GetCurrentState() is DeathState) return;
Diese Zeile prüft, ob der aktuelle Zustand DeathState
ist.
Befindet sich der Gegner im DeathState
, wird die Methode vorzeitig beendet, sodass keine weiteren Updates für das Ausrichten zum Spieler oder andere Verhaltensweisen erfolgen.
Ausrichtung zum Spieler
Die folgenden Zeilen sorgen dafür, dass der Gegner immer dem Spieler zugewandt ist:
scale.x = transform.position.x > player.position.x ? -1 : 1;
transform.localScale = scale;
scale.x = transform.position.x > player.position.x ? -1 : 1;
Diese Zeile prüft, ob die x-Position des Gegners größer ist als die x-Position des Spielers:
- Wenn ja, wird
scale.x
auf-1
gesetzt, sodass der Gegner nach links schaut; - Wenn nein, wird
scale.x
auf1
gesetzt, sodass der Gegner nach rechts schaut.
transform.localScale = scale;
Diese Zeile wendet den aktualisierten Scale-Wert auf den Transform des Gegners an und stellt sicher, dass er in die richtige Richtung schaut.
Warum wir es so gemacht haben
Behandlung des Todeszustands
Das Hinzufügen der Überprüfung auf DeathState
stellt sicher, dass der Gegner nach seinem Tod sein Verhalten oder seine Ausrichtung nicht weiter aktualisiert. Dies ist entscheidend, um die Spiellogik aufrechtzuerhalten und unerwartete Verhaltensweisen zu verhindern, nachdem der Gegner inaktiv sein sollte.
Zentralisierte Logik
Durch das Verschieben der Spieler-Ausrichtungslogik in die Update
-Methode wird dieses Verhalten zentralisiert, wodurch Redundanz reduziert und die Wartbarkeit des Codes verbessert wird.
Es wird sichergestellt, dass der Gegner den Spieler immer ansieht, unabhängig vom aktuellen Zustand, was zustandsspezifischen Code vereinfacht.
Erklärung der Gegner-Todesbehandlung
public class DeathState : State
{
Animator animator;
public DeathState(Animator animator)
{
this.animator = animator;
}
public override void StartState()
{
isStateFinished = false;
animator.SetBool("death", true);
}
public override void EndState()
{
}
}
Die Klasse DeathState
ist ein spezifischer Zustand, der das Verhalten des Gegners beim Tod behandelt.
Warum wir es so gemacht haben
Behandlung des Todesverhaltens
Die Klasse DeathState
verwaltet speziell das Verhalten des Gegners beim Tod und stellt sicher, dass die Todesanimation abgespielt und der Zustand als abgeschlossen markiert wird.
Integration der Animation
Durch die Verwendung von Animator-Parametern wird gewährleistet, dass die Todesanimation korrekt mit dem Zustandswechsel synchronisiert ist und ein flüssiges, realistisches Erlebnis bietet.
Partikel beim Tod des Gegners erzeugen
if (health <= 0)
{
stateManager.ChangeState(deathState);
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity);
deathParticle.Play();
Destroy(deathParticle.gameObject, 5);
}
Dieser Code zeigt, wie der Gegner seinen Tod verarbeitet, wenn seine Gesundheit auf null sinkt. Es erfolgt ein Wechsel in den DeathState
und ein Todespartikeleffekt wird abgespielt.
Code-Analyse
Gesundheitsüberprüfung
if (health <= 0)
Diese Bedingung prüft, ob die Gesundheit des Gegners auf null oder darunter gefallen ist.
Übergang zum DeathState
stateManager.ChangeState(deathState)
Diese Zeile versetzt den Gegner mithilfe des DeathState
in den StateManager
.
Instanziierung der Todespartikel
var deathParticle = Instantiate(deathParticles, transform.position, Quaternion.identity)
Diese Zeile erstellt eine Instanz des Todespartikel-Effekts an der Position des Gegners.
deathParticles
ist ein Prefab, das das Partikelsystem für den Todeseffekt enthält.
Quaternion.identity
stellt sicher, dass die Partikel keine Rotation haben.
Abspielen der Todespartikel
deathParticle.Play()
Diese Zeile spielt den instanziierten Partikeleffekt ab.
Zerstörung der Todespartikel
Destroy(deathParticle.gameObject, 5)
Diese Zeile plant die Zerstörung des Partikeleffekt-GameObject
s nach 5 Sekunden, damit es nicht dauerhaft im Spiel bleibt.
Warum wir es so gemacht haben
Zustandsverwaltung:
Der Übergang in den DeathState
stellt sicher, dass das Todesverhalten des Gegners korrekt verwaltet wird und spezifische Logik für den Todeszustand ausgeführt wird.
Visuelle Effekte: Das Abspielen eines Todespartikeleffekts bietet dem Spieler visuelles Feedback und verbessert das Spielerlebnis.
Danke für Ihr Feedback!