Laden...

NextLevel Skript

Letzter Beitrag vor 26 Tagen 3 Posts 177 Views
NextLevel Skript

Hallo

ich bräuchte mal Hilfe von Jemanden. Ich habe ein Skript geschrieben damit mein Spiel erkennt welche Level ich gerade bin und wenn ich mein Level geschafft habe in die Winscene komme und dort auf Next Level Button drücke normalerweise sollte dann mein nächste Level kommen aber irgendwie funktioniert es nicht ganz. Daher meine Frage ob jemand mein Fehler erkennt und mir helfen kann.

public class LoadSceneButton : MonoBehaviour
{
   public string winSceneName = "WinScene";
   public string loseSceneName = "LoseScene";
   public string[] SceneName;
   public string MainMenu = "IntroMenu";
   private int currentLevelIndex;
   private void Start()
   {
       currentLevelIndex = PlayerPrefs.GetInt("CurrentIndex", 0);
   }
   void Update()
   {
       if (EventSystem.current.currentSelectedGameObject == gameObject
           && Input.GetButtonDown(GameConstants.k_ButtonNameSubmit))
       {
           LoadTargetScene();
       }
   }
   public void LoadTargetScene()
   {
       if (IsLevelCompleted())
       {
           LoadWinScene();
       }
       else
       {
           LoadLoseScene();
       }
   }
   private bool IsLevelCompleted()
   {
       
       //GetComponent<GameFlowManager>().EndGame();           
       Debug.Log("weiß nicht");
       return true;
   }
   private void LoadWinScene()
   {
       PlayerPrefs.SetInt("CurrentLevelIndex", currentLevelIndex + 1); // Aktualisiere den Level-Index
       SceneManager.LoadScene(winSceneName); // Lade die Gewinnerszene
   }
   private void LoadLoseScene()
   {
       SceneManager.LoadScene(loseSceneName); // Lade die Verliererszene
   }
   public void ReplayCurrentLevel()
   {
       // Wiederhole das aktuelle Level
       //PlayerPrefs.GetInt("CurrentLevelIndex" );
       SceneManager.LoadScene(SceneName[currentLevelIndex ]); // Lade das aktuelle Level erneut
       Debug.Log("gleiche Level");
   }
   public void NextLevel()
   {
       Debug.Log("NextLevel() aufgerufen");
       currentLevelIndex = PlayerPrefs.GetInt("CurrentLevelIndex");
       Debug.Log("Aktueller Level Index: " + currentLevelIndex);
       // Überprüfe, ob das Spiel noch Level hat
       if (currentLevelIndex < SceneName.Length)
       {
           SceneManager.LoadScene(SceneName[currentLevelIndex]); // Lade das nächste Level
           Debug.Log("Next Level");
       }   
       else
       {
           // Handle den Fall, wenn alle Level geschafft sind, z.B. zurück zum Hauptmenü oder zur Endszene
           Debug.Log("Alle Level erledigt!");
           SceneManager.LoadScene(MainMenu);
           
       }
   }

Hallo Salman

Ich vermute, dass die Methode NextLevel nicht aufgerufen wird. Den Code für den diesen Aufruf zeigst du leider nicht.
Hast du dich denn mal mit dem Debugger drangehängt? Dann müsste man das doch easy sehen.

Gruss
Alf

Hallo und willkommen,

du solltest dazu geschrieben haben, daß es sich um C#-Code für Unity handelt.

Was mir auffällt:
Es wird bisher nirgendwo NextLevel() aufgerufen. Du mußt in der Update-Methode, genauso wie für die bisherige Button-Abfrage, den Button für "NextLevel" abfragen.

Ich bin jedoch kein Unity-Experte und weiß z.B. nicht, was genau gameObject dort bedeutet.

PS: Üblicherweise setzt man bei solchen Projekten endliche Zustandsautomaten (finite state machines) ein. Als Beispiel für Unity habe ich Simple Finite State Machine for Unity (C#) gefunden.