Jump to content
Unity Insider Forum

Skript auf 2. Level übertragen


MsWhite

Recommended Posts

Hi, ich bräuchte mal Hilfe.

Ich sollte ein Skript erstellen, das mir anzeigt, wie viele Leben ich noch habe und wie oft ich schon gestorben bin. Das Skript habe ich und es funktioniert auch. Problem:
Ich habe 2 Level und wenn ich dieses Skript in das 2. Level nehme, dann zählt es von vorne los. Ich möchte aber, dass die Leben und wie oft ich gestorben bin, einfach übernommen werden und es weiterzählt... wie krieg ich das hin? Ich arbeite mit C#.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein 2ter Level ist eine neue Szene?
Wenn ja, dann gib dem Script einfach in der Awake() oder Start() den Befehl:
DontDestroyOnLoad(). Schau dir mal den Link an, da sind einige Beispiele bei.
https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

Mit diesem Befehl, wird das GameObject nicht beim Szenenwechsel zerstört und ist in der nächsten Szene noch da, mit all den Werten, die es in der alten Szene hatte.
Natürlich darfst du nicht nochmal so ein Objekt in der neuen Szene haben, weil dann hättest du ja 2 Objekte der gleichen Art.

Ich weiß nicht wie fortgeschritten du bist, deswegen gehe ich jetzt nicht auf ein Singleton ein.
Außerdem musst du wissen,  dass ein Script nicht alleine in einer Szene sein kann. Das Script muss immer auf einem Gameobject liegen, und somit solte dein Script, (welches die Werte hat) auf einem neutralen Objekt liegen, also nicht auf dem Player oder der Kamera, denn die sind in der neuen Szene bestimmt nochmal drin.
Und noch was Wichtiges: Da dein Objekt sich bei einem Szenenwechsel nicht zerstört, musst du es per Befehl zerstören, wenn du aus dem Spiel ins Hauptmenü zurück gehst, oder du gestorben bist und wieder bei Lvl1 anfangen willst. Dort im Lvl1 wird ja dieses Object geladen und hat die default Werte.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst auch einfach deine Variablen statisch machen. Normale Variablen gibt's mit je einem Wert jeweils einmal pro Objekt (wenn du z.B. zwei Lichter hast, kann das eine blau und das andere rot sein, weil die "Farbe"-Variable des Lichts nicht statisch ist). Statische Variablen gibt's nur einmal pro Programm und sind an einem festen Ort, wo jeder Code ihn finden kann, wenn du das möchtest. Da statische Variablen nicht Teil von Objekten sind (also dem Ding im Inspektor, das auftaucht, wenn du da dein Script reinziehst), gehen deren Werte auch nicht flöten, wenn das Objekt durch einen Szenenwechsel zerstört wird. Die Variable existiert einfach einmalig von Anfang bis Ende des Programms.

Du kannst das so machen: Statt

public int deaths;

machst du

public static int deaths;

Damit ist die Variable statisch. Nach dieser Änderung dürfte dir auffallen, dass "Deaths" auch nicht mehr im Inspektor auftaucht, wenn du dir ein GameObject mit deiner Komponente anschaust. Zugreifen kannst du auf die Variable genau wie vorher, aber zusätzlich auch noch so, wenn du das willst:

DerNameDeinesScripts.deaths += 1;

Denk aber eben daran, dass es die Variable "deaths" jetzt nur noch genau einmal gibt, also nicht mehr einmal pro Objekt. Wäre die Farbeigenschaft der Lichtkomponente statisch, dann hätten alle Lichter dieselbe Farbe, anstatt dass eines blau sein kann und das andere rot. Bei "wie oft ist der Spieler gestorben" ist das völlig okay, in vielen anderen Fällen natürlich nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 21 Stunden schrieb malzbie:
Zitat

 

Dein 2ter Level ist eine neue Szene?
Wenn ja, dann gib dem Script einfach in der Awake() oder Start() den Befehl:
DontDestroyOnLoad(). Schau dir mal den Link an, da sind einige Beispiele bei.
https://docs.unity3d.com/ScriptReference/Object.DontDestroyOnLoad.html

Mit diesem Befehl, wird das GameObject nicht beim Szenenwechsel zerstört und ist in der nächsten Szene noch da, mit all den Werten, die es in der alten Szene hatte.
Natürlich darfst du nicht nochmal so ein Objekt in der neuen Szene haben, weil dann hättest du ja 2 Objekte der gleichen Art.

Ich weiß nicht wie fortgeschritten du bist, deswegen gehe ich jetzt nicht auf ein Singleton ein.
Außerdem musst du wissen,  dass ein Script nicht alleine in einer Szene sein kann. Das Script muss immer auf einem Gameobject liegen, und somit solte dein Script, (welches die Werte hat) auf einem neutralen Objekt liegen, also nicht auf dem Player oder der Kamera, denn die sind in der neuen Szene bestimmt nochmal drin.
Und noch was Wichtiges: Da dein Objekt sich bei einem Szenenwechsel nicht zerstört, musst du es per Befehl zerstören, wenn du aus dem Spiel ins Hauptmenü zurück gehst, oder du gestorben bist und wieder bei Lvl1 anfangen willst. Dort im Lvl1 wird ja dieses Object geladen und hat die default Werte.

 

 

 

Genau, mein zweiter Level ist eine neue Szene. In der neuen Szene ist dann auch ein neuer Player, eine Kugel. Das Skript befindet sich auch auf der Kugel, es sind sozusagen 2 oder 3in1. Das Hauptscript war, dass die Kugel am Anfang der 1. Szene neustartet, sofern sie die Spielbahn verlässt. (Ist ein Sidescroller.) Darein habe ich dann auch gesetzt, dass ich nur 5mal abstürzen darf, danach wird ein "GameOver Screen" gezeigt und das Spiel ist zuende. Den Counter wollte ich dann auch im Bild, hat für die 1. Szene auch funktioniert. Leben/Tode werden angezeigt, zählen rauf bzw runter, nach 5 Abstürzen ist Schluss. In der 2. Szene ist das dann eben wieder restet und startet bei 0... Ich bin leider absoluter Newbie und kämpfe mich da durch, verstehe vieles auch überhaupt nicht, weil es in den Begleitheften für mein Studium echt schwer beschrieben ist.


 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...