Jump to content
Unity Insider Forum

Level neustarten


Felix K.

Recommended Posts

Hallo, ich hab folgendes Problem und such eine Lösung dafür.

 

Szenenaufbau:

In meiner Szene befindet sich ein Fahrzeug, welches man steuern kann.

Wenn dieses Fahrzeug crasht, ist es vorbei und man muss das Level neustarten.

Nachdem das Fahrzeug kaputt ist, erscheint ein Button mit dem man ins Hauptmenü zurückkommt, das Hauptmenü ist eine eigene Scene.

 

Was geht schief?

Wenn ich auf den Button "neues Spiel" im Hauptmenü drücke. Wird via:

Application.LoadLevel(1);

das Level neu gestartet. Alles ist wieder wie es sein soll. Fahrzeug in Ordnung, steht am Spawn-Punkt usw.

Das Problem ist nur, das die letzte Geschwindigkeit beim Unfall noch da ist und das Fahrzeug legt los.

 

Fragen:

Kann man das so zurücksetzen als wäre es der erste Start des Levels?

Oder muss ich ne Lösung finden die die Werte wieder auf 0 setzt?

 

Danke im voraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das ist eigentlich normalerweise gar nicht möglich. Wenn ein Level geladen wird, sollte alles wie beim ersten mal sein.

 

Könnte es sein, das du die Geschwindigkeit irgendwie "extern" Speicherst? Zum Beispiel in einer anderen Klasse oder sowas?

Oder verwendest du irgendwo DontDestroyOnLoad?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Irgendwas ist da krumm, die Geschwindigkeit von Rigidbodys sollte wie alles andere auch zurückgesetzt werden.

Deine erste Frage ist also beantwortet mit: Ja, und das tust du eigentlich auch schon.

 

Offenbar lässt aber eines deiner Scripts das Auto in die neu geladene Szene hinein wechseln.

Arbeitest du irgendwo mit static oder DontDestroyOnLoad?

 

//e: Ja geil, zweiter :P

Link zu diesem Kommentar
Auf anderen Seiten teilen

Be careful using statics^^

Klar kann man damit ein paar Shortcuts machen, aber wie man sieht geht es genauso gut auch voll gegen den Baum ;)

Ich würde dir empfehlen statics nur für Dinge zu benutzen um irgendwas auszurechnen oder für Methoden, die du nicht x mal in jedes Script schreiben willst... sowas wie:

public static int GetIrgendwasAus(int a, int {return a+b;}

oder

public static void MachWasMit(Spieler spieler, int a, int 
{
var e = a+b;
spieler.EinePublicMethodeAmSpieler(e);
Debug.Log(spieler.MeinName + " hat irgendwas bekommen: " +e);
}

Ansonsten lieber die Finger davon lassen. ;)

 

Kleiner Tipp:

Du hast sicher einen GameController oder GameManager... wenn du dort eine static var einbaust wie

public static Spieler MeinSpieler;

und sich dein Spieler zB. in seiner Awake Methode beim GameManager "anmeldet" und sagt

GameManager.MeinSpieler = this;

kannst du diesen "Shortcut" (GameManager.MeinSpieler) überall gut nutzen, ohne immer wieder über GetComponent oder ähnliches zu gehen. Das kann eine Menge Kopfschmerzen ersparen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...