Jump to content
Unity Insider Forum

Wartezeit nach Loader


bucklewhee

Recommended Posts

Hallo zusammen.

Zunächst möchte ich euch alle herzlich grüßen. Das ist mein erster Eintrag im Forum und ich hoffe, dass mir jemand helfen kann.
Wenn ich ein Projekt erstelle und online anwähle, dann taucht zunächst der Ladebalken auf. Dieser füllt sich langsam und es tut sich was. Doch dann verschwindet der Ladebalken und es passiert für weitere fünf Sekunden nichts. Erst dann taucht die Szene auf.
Ich finde diese zusätzliche Wartezeit äußerst störend - und Kunden ganz gewiss auch.

Daher meine Frage:
Kann man diese Wartezeit irgendwie in den Loader mit einfließen lassen, umgehen, austricksen ...?

Vielleicht hat ja jemand eine Idee.

Viele Grüße
Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Willkommen! :)

Der Balken zeigt dir nur die Zeit an, bis die ganzen Daten aus dem Netz geladen sind. Das Laden und Erstellen der Szene zeigt der Balken aber nicht. Tja, und das ist deine Wartezeit.
Was du machen kannst, ist eine Eingangsszene, die nichts weiter hat, als einen schwarzen Screen mit der Schrift: Loading. Die ist ratzfatz geladen.
Die nächste Szene lädst du dann asynchron von diesem Screen aus. So sieht der User wenigstens, dass da noch etwas passiert.

https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 weeks later...

Hallo Malzbie,

im Großen und Ganzen hat es geklappt. Ich habe die Szene so konfiguriert, wie Du mir geraten hast und es läuft:

https://www.cleon-studios.de/x/index.html

So richtig glücklich bin ich jedoch nicht, da nach dem Unity-Ladebalken immer noch viel leere Fläche gezeigt wird. Ich habe daher ein Standbild mit einem kurzen Text eingefügt, um über die Wartezeit ein wenig hinwegzutäuschen. Erst dann kommt der schwarze Screen mit dem Text "Loading". Jetzt meine Frage:
Habe ich das richtig gemacht? Das Script, das ich eingefügt habe lautet:

using UnityEngine;
using System.Collections;

public class loading : MonoBehaviour
{
    IEnumerator Start()
    {
        AsyncOperation async = Application.LoadLevelAsync("2_scene");
        yield return async;
        Debug.Log("Loading complete");
    }
}

Ich habe das Script in das Canvas eingefügt. War das ok?

Viele Grüße und danke für die Antwort
Stefan

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich würde es anders machen, vorallem da dein Ladebefehl veraltet ist.

Man nutzt jetzt den Scenemanager.

Damit das Geht, musst du oben im Script folgenden Usingbefehl einfügen:

using UnityEngine.SceneManagement;

ja und dann kannst du irgendwo in deinem Code die Szene mit folgendem Befehl nachladen:

 SceneManager.LoadSceneAsync(nummer der Szene als int oder Name der Szene als String);

Hier mal ein kleines Beispiel, wie du die Szene laden kannst und dazu auch noch einen Fortschrittext angezeigt bekommst.

using System.Collections;
using UnityEngine;
using UnityEngine.UI; // wichtig wenn man die neue UI ansprechen will
using UnityEngine.SceneManagement; // wichtig wenn man den Scenemanager nutzen will.

public class TestLaden : MonoBehaviour {
	public Text LoadingText; // UI-Textelement hier im Inspector rein ziehen. 
	string derText = "Loading\n";
	bool isLoading=false;

  void Update(){
    if(Input.GetKeyDown(KeyCode.L)&& !isLoading){
      isLoading=true; // damit hier nicht nochmal ausgeführt werden kann
      LoadingText.text = derText; // Text an UI Element übergeben
      SceneManager.LoadSceneAsync("2_szene"); // Szene im Hintergrund laden
      InvokeRepeating("Ladetext",0.2f,0.2f); //dauerhaftes zyklisches ausführen von der Ladetextmethode
    }
  }
  void Ladetext() {
    LoadingText.text = LoadingText.text + "."; // hier wird an den vorhandenen Text ein Punkt angehangen und zum neuen Text gemacht
  }
}

Natürlich kannst du auch eine animierte Grafik solange drehen lassen, oder... oder... oder...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...