Kursinhalt
Kampfspiel in Unity
Kampfspiel in Unity
Den Code Erklären
Spieler-Code
Initialisierung in der Start-Methode
private void Start()
{
startPosition = transform.position;
}
Zweck: Speichert die Anfangsposition des Spielers beim Start des Spiels.
Spielerposition zurücksetzen
public void RestartPlayerPosition()
{
transform.position = startPosition;
rb.velocity = Vector2.zero;
}
Zweck: Setzt die Position des Spielers auf die Startposition zurück und stoppt jegliche Bewegung, indem die Geschwindigkeit auf null gesetzt wird.
Verarbeitung der Spielereingabe in der Update-Methode
private void Update()
{
Vector2 oldVelocity = rb.velocity;
if (Input.GetKeyDown(KeyCode.Space))
{
oldVelocity.y = 6;
}
oldVelocity.x = 4;
rb.velocity = oldVelocity;
}
Zweck: Erfasst die Eingabe des Spielers (Leertaste), um den Spieler durch Setzen der y-Geschwindigkeit auf 6 "springen" zu lassen, während der Spieler durch Setzen der x-Geschwindigkeit auf 4 konstant nach rechts bewegt wird.
Kollisionsbehandlung
OnCollisionEnter2D
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag == "ground")
{
RestartPlayerPosition();
}
}
Zweck: Setzt die Position des Spielers zurück, wenn eine Kollision mit Objekten mit dem Tag "ground" erfolgt.
OnTriggerEnter2D
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.tag == "win")
{
winPanel.SetActive(true);
SoundManager.instance.PlayEffect(1);
}
}
Zweck: Aktiviert das Gewinn-Panel und spielt einen Soundeffekt ab, wenn der Spieler mit Objekten mit dem Tag "win" kollidiert.
Zusammenfassung
- Bewegung: Spieler bewegt sich kontinuierlich nach rechts und springt, wenn die Leertaste gedrückt wird;
- Neustart: Spielerposition wird bei Kollision mit dem Boden zurückgesetzt;
- Gewinn: Zeigt ein Gewinn-Panel an und spielt einen Sound ab, wenn der Gewinn-Trigger erreicht wird.
SoundManager-Klasse
Start-Methode
private void Start()
{
if (instance == null)
{
instance = this;
}
else
{
Destroy(gameObject);
return;
}
DontDestroyOnLoad(gameObject);
}
Zweck:
Stellt sicher, dass es im Spiel nur eine Instanz von SoundManager
gibt, indem das Singleton-Muster verwendet wird. Mit DontDestroyOnLoad(gameObject)
bleibt das Objekt über verschiedene Szenen hinweg erhalten.
PlayEffect-Methode
public void PlayEffect(int index)
{
if (index >= 0 && index < effects.Count)
{
source.PlayOneShot(effects[index]);
}
}
Zweck:
Verwendet einen ganzzahligen index
, um den abzuspielenden Soundeffekt aus der Liste effects
zu bestimmen. Es wird geprüft, ob der index
im gültigen Bereich der Liste effects
liegt, und der entsprechende Soundeffekt wird mit source.PlayOneShot(effects[index])
abgespielt.
Zusammenfassung
- Singleton-Muster: Stellt sicher, dass nur eine Instanz von
SoundManager
im Spiel existiert und über Szenen hinweg erhalten bleibt; - Abspielen von Soundeffekten: Verwendet die Methode
PlayEffect
, um Soundeffekte durch Angabe ihres Indexes in dereffects
-Liste abzuspielen; - Audioquelle: Nutzt eine
AudioSource
-Komponente, um die Audioclips wiederzugeben.
WinPanel-Klasse
Die Klasse WinPanel
bietet Funktionalität für das UI-Panel, das erscheint, wenn der Spieler gewinnt. Sie enthält Methoden, um zum Hauptmenü zurückzukehren oder das Level neu zu starten. Jede Methode spielt einen Soundeffekt ab und lädt die entsprechende Szene.
Methoden
ReturnToMainMenu-Methode
public void ReturnToMainMenu()
{
SoundManager.instance.PlayEffect(0);
SceneManager.LoadScene(0);
}
Zweck:
Spielt einen Soundeffekt (Index 0) mit SoundManager.instance.PlayEffect(0)
. Lädt die Hauptmenü-Szene mit Build-Index 0 über SceneManager.LoadScene(0)
.
RestartLevel-Methode
public void RestartLevel()
{
SoundManager.instance.PlayEffect(0);
SceneManager.LoadScene("Game");
}
Zweck:
Spielt einen Soundeffekt (Index 0) mit SoundManager.instance.PlayEffect(0)
. Lädt die Spielszene mit dem Namen "Game" über SceneManager.LoadScene("Game")
.
Danke für Ihr Feedback!