|
Hallo, ich programmiere zur Zeit ein kleines 2D-Spiel. Ich habe einen Startszene und möchte nach z.B. 20 Sekunden automatisch auf meine Menüszene kommen. Könnt ihr mir helfen, ich versuche die ganze Zeit Application.LoadLevel(1); 1 ist die Instanz von meinem Menü beim Build & Run. Das Skript mit dem "LoadLevel" habe ich an meine Startszene eingepflegt. Mein Startbildschirm erscheint perfekt, wechselt aber nicht.
Ich danke Euch für die Hilfe... |
|
|
|
|
|
|
|
Du möchtest also auf jeden Fall immer 20 Sekunden, nachdem die Startszene geladen wurde die Menüszene laden, oder? Dazu würdest du dann in der Startszene das gewünschte Script (z.B. "MenuLoader") an ein beliebiges Objekt hängen (wobei ich empfehlen würde, das Objekt so zu nennen, wie das Script heisst, in dem Fall also auch MenuLoader). Bei der Implementierung von MenuLoader hast du dann in der Methode Awake() oder Start() (Start() finde ich in dem Fall geeigneter, funktioniert aber beides) einen Aufruf StartCoroutine(LoadLevelDelayed()); ... wobei "LoadLevelDelayed()" wieder ein beliebiger Methodenname ist. Das kann also auch anders heissen, wenn dir das lieber ist. Bei der Implementierung von LoadLevelDelayed() ist dann wichtig, dass der Rückgabetyp ein IEnumerator ist, also public IEnumerator LoadLevelDelayed() { ... }. Und in dieser Methode hast du dann deinen Aufruf "Application.LoadLevel(1);" ... der ist an sich korrekt. Ich persönlich finde es lesbarer, den Level über den Namen zu laden. Das hat auch den Vorteil, dass du dann keine Probleme bekommst, wenn du z.B. noch einen zusätzlichen Startlevel davor hängst. Aber das kann auch Nachteile haben - ist also eher Geschmacksfrage. |
|
beantwortet21.05.2015 Jashan Chittesh 301
|
|
|
|
|
IEnumerator ist ein Interface das bei Generischen Collections standartmäßig implementiert ist. Dies bewirkt im Grunde, dass man durch zum Beispiel eine List<T> mit foreach iterieren kann. Dies Funktioniert so, dass die Wert aus z.b. einer List<T> mit foreach iteriert wird, sprich jeder Wert einzeln zürückgegeben und verarbeitet wird (ein Wert nach dem anderen Wert). Bei Unity benutzt du ihn bei Coroutinen, damit im Prinzip durch die Funktion "iteriert" werden kann. Das geht wie folgt: Funktion: public IEnumerator LoadLevelDelayed() Aufruf als Coroutine: StartCoroutine(LoadLevelDelayed()); Hier returned deine Funktion sequentiel erst die 20 Sekunden warten, dann wir wieder in die Funktion gesprungen zur Zeile hinter yield return.... , also in dem Fall dein Level wird geladen!
|
|
|
beantwortet21.05.2015 breez 26
|
|
|
|
|
|
Hallo nochmal, genau ich möchte sobald der Startbildschirm angeht nach 20 s mein Spielemenü aufgeht. Ich danke Dir für deine schnelle Antwort, habe aber noch ein Problem. Was bewirkt der IEnumerator, bzw. was muss ich zurückgeben. Ich bekomme aktuell den Fehler: Error CS0161: "MenuLoader.LoadLevelDelayed()": Nicht alle Codepfade geben einen Wert zurück. (CS0161) (Assembly-CSharp) Danke für die Hilfe |
|
|
beantwortet21.05.2015 Christine 10
|
|
|