Jump to content
Unity Insider Forum

LoadScene im Editor und auf Android


Singular

Recommended Posts

Hallo zusammen,

Ich habe mein Spiel als internen Test hochgeladen.

Jetzt habe ich allerdings das Problem, dass das Spiel startet, ich lande im hauptmenü und drücke auf Spiel Starten.

Es wird eine kurze Animation abgespielt (wie geplant) und anschließend sollte eigentlich das Level geladen werden. Das passiert allerdings nicht. Ich bleibe im Hauptmenü und kann nichts mehr machen.

Mein Script dazu ist denkbar einfach und werde ich hier jetzt nicht aufschreiben

Knopf gedrückt --> starte Coroutine mit Animation--> am Ende der Coroutine Laden nächste Scene.

Ich kann mir nur vorstellen dass die Coroutine hier Probleme macht... wie gesagt ohne Absturz und am PC funktioniert alles.

 

Mir fällt gerade noch ein, in der nächsten Scene wird das erste Level aufgebaut das in eine Json Datei abgelegt ist. Könnte das Peobleme machen, dass die Json Datei nicht mitgenommen wurde? Oder wird alles mitgenommen in meinem Ordner dirin ist?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weiß ich nicht. Ich habe das Unity remote bisher nicht zum Laufen gebracht. Und eine Debugging Datei kann ich scheinbar nicht im Play Store hochladen. 

Deswegen der einzige Test den ich bisher durchführen konnte war ganz normal im Editor und danach als interner Test als Download vom Google Play Store auf meinem Handy.

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, remote hab ich jetzt zum laufen gebracht aber der Build läuft gar nicht... wenn ich Build & Run starte findet er mein Handy gar nicht. Aber wie gesagt ich habe es im PlayStore hochgeladen und darüber gemacht... leider weiterhin ohne Erfolg. Habe nochmal woanders nachgeschaut aber leider ohne Erfolg. 😭

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Singular:

Ich habe das Unity remote bisher nicht zum Laufen gebracht

Naja, Unity Remote heißt sowieso, dass das im Editor läuft. Die Remote-App sendet Input zum Editor und kriegt dafür die Game View aus dem Editor gestreamt. Das Ding ist klasse, um nicht immer einen neuen Build zu bauen, wenn man eine kleine Änderung testen will. Aber in deinem Fall nützt es natürlich nichts, wenn der Fehler nicht im Editor, sondern nur auf dem Gerät auftritt.

vor 2 Stunden schrieb Singular:

Und eine Debugging Datei kann ich scheinbar nicht im Play Store hochladen. 

Sollst du auch nicht - du packst den Build einfach direkt auf den Handy :)

Aber.... das scheinst du ja inzwischen schon zu versuchen.

vor 42 Minuten schrieb Singular:

wenn ich Build & Run starte findet er mein Handy gar nicht.

Den Developer Mode hast du auf dem Handy angeschaltet?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das meine SceneManagement.LoadScene() in einer Corotiune liegt spielt keine Rolle oder?

    public void StartButton()
    {
        player.reset = true;
        ButtonAnimatonStart(0);
        StartCoroutine(LoadNewScene("Game"));
    }

    IEnumerator LoadNewScene(string sceneName)
    {
        yield return new WaitForSecondsRealtime(1.8f);
        SceneManager.LoadScene(sceneName);
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, das ist kein Problem.

Wenn du dein Handy anschließt und dann evtl. noch Build & Run auf Any Device anmachst, kann es sein, dass dein Handy den Fingerprint deines PCs anzeigt. Das müsstest du dann bestätigen. Ich würde das echt zum Laufen kriegen wollen, weil du dir mit einem Debug Build auf dem Handy Exceptions anzeigen lassen kannst. Und vermutlich fliegt da eine.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe jetzt mal folgenden Test gemacht:

Ich habe das Spiel ganz ohne Hauptmenü durch den Builder geschoben. Selbst dann passiert bei mir rein gar nichts. Ich bekomme die Anzeige dass das Spiel mit Unity gemacht wurde und danach einen schwarzen Bildschirm. Im Editor habe ich, wie ich schon vorher erwähnt, keine Fehlermeldung.

Auch wenn ich noch nie Latein beherrscht habe, ich bin mit meinem am Ende.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du deinen Build nicht direkt auf's Handy deployen kannst, kannst du trotzdem einen Build erstellen ("Build" ohne "& Run"). Dann nimmst du die gebaute APK-Datei aus dem Ordner und verschiebst sie über normalen Datentransfer auf dein Handy. Nimm den Dateimanager deiner Wahl (z.B. "Downloads", wenn du die APK in den Downloads-Ordner geschoben hast, sonst mit einem richtigen Dateimanager) und installiere die APK damit.

Beim Bauen darauf achten, dass "Development Build" angehakt ist. Ob "Scripting Debugging" an sein muss, weiß ich gerade nicht mehr - hau einfach rein. Wenn du jetzt das Spiel auf dem Handy testest, müsste bei einer Exception eine Konsole aufgehen, die sie dir anzeigt, und dann weißt du mehr.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sehr schön dann werde ich das gleich mal ausprobieren. 

Ich habe mir gerade mal meinen Code von meinem GameManager angeschaut (der mittlerweile ca 500 Zeilen Code beinhaltet) um ihn etwas besser aufzuteilen. Dabei ist mir folgendes aufgefallen:

Um die Level aufzubauen soll er eine Json Datei in einem Bestimmten Pfad heraussuchen und das Level Aufbauen. Der BuildManager Schaut also nach was das currentLevel ist und sollte das zu hoch sein weil der Spieler schon alle Level durch hat, wird das CurrentLevel wieder auf 0 gesetzt und die Methode neu gestartet. Es wird also eine Endlosschleife erzeugt. Bedeutet aber auch, dass die Json Dateien, die ich im Spiel abgelegt habe, nicht da sind.

Die Dateien werden so aufgerufen:

Applikation.dataPath +"/Scenes/Level/Level" + currentLevel + ".jason"

Wenn ich allerdings in diese Endlosschleife gerate stellt sich mir die Frage, wo sind sie dann sobald ich das Spiel gebuildet habe. Weil dann muss ich den Dateipfad nämlich anpassen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Minuten schrieb Singular:

GameManager angeschaut (der mittlerweile ca 500 Zeilen Code beinhaltet)

giphy.gif

Allein der Klassenname "GameManager" ist bei mir auch einfach immer ne Red Flag :D

vor 6 Minuten schrieb Singular:

Es wird also eine Endlosschleife erzeugt.

Dann bau da doch mal eine Abfrage ein, fang das ab und probier es aus :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

 

vor 2 Stunden schrieb Sascha:

Allein der Klassenname "GameManager" ist bei mir auch einfach immer ne Red Flag :D

Ruhig brauner, ich arbeite dran... abgesehen davon ist er halt Dreh und Angelpunkt. Wenn irgendein Objekt eine Frage hat, rennt er zum GM und der leitet die Frage weiter. Das machen gute Geschäftsführer. Damit der etwas entlastet wird will ich sowieso Abteilungsleiter einführen die ihre Spezialgebiete haben. Dadurch wird die Hierachie in der Firma auch etwas Übersicher.

Und 500 Zeilen natürlich inklusive Klammer usw... das sind etwa 12 Methoden inkl Start und Update.

vor 2 Stunden schrieb Sascha:

Dann bau da doch mal eine Abfrage ein, fang das ab und probier es aus

Das habe ich jetzt vor. Bzw werde noch eine Abfrage einbauen falls das CurrentLevel == 0 && nicht gefunden wurde dass er nicht auf die Idee kommt vorne anzufangen...

Aber wenn das der Fehler ist (was ich hoffe) Weiß ich noch nicht wie ich die Json Dateien in das Build bekomme

Ich melde mich heute abend nochmal sobald ich von der Arbeit komme. Dann schaue ich mir das nochmal an.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um hier mal selbst die Abründe von Unity erkunden zu können, auch auf die Gefahr hin von dir gesteinigt zu werden weil du selbst sagst:

       "Resources.Load. Benutze ich exakt niemals in meinen Projekten, und das hat auch seine Gründe :)"

Ich möchte, meine Endlosschleife loswerden möchte aber dennoch eine Lösung haben, die da Funktioniert deswegen habe ich gerade keine andere Wahl... (Außer du sagst mir wie)

Problem ist, dass meine Level nicht gefunden werden, weil ich sie im Editor über Application.Path heraussuche sie im Build dann aber im void verschwinden. Deswegen möchte ich die Dateien sicher ablegen können, wo ich sie auch wiederfinden kann. Dafür habe ich mir einen "Resources" Folder in Assets erstellt und habe meine .json Dateien da rein gejagt. Jetzt will ich sie natürlich auch wieder laden können und habe dazu dann folgendes geschrieben:

string txt = Resources.Load<TextAsset>("/Level/Level" + player.currentLevel + ".json").text;
SaveObject s = JsonUtility.FromJson<SaveObject>(txt);

Die erste Zeile wirft direkt schon eine NullReferenceExeption aus.

Wo genau muss ich meine Level.json Dateien ablegen, damit sie gefunden werden können? 

https://docs.unity3d.com/ScriptReference/Resources.Load.html - lässt danach urteilen, dass es egal ist ...

The path is relative to any folder named Resources inside the Assets folder of your project. 

 

Edit: Achso und der Fehler kam von dieser Endlosschleife... habe nochmal ein Build hochgeladen, wo ich sie nicht auslöse. Das Spiel funktioniert jetzt wie erwartet auch wenn nicht wie gewünscht, weil das Level nicht läd...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Resources.Load will keine Dateiendungen. Also nur

Resources.Load<TextAsset>("/Level/Level1")

Und dann musst du diesen Pfad haben:

Assets/[...]/Resources/Level/Level1.json

wobei [...] alles mögliche sein kann, inklusive gar nichts (Resources-Ordner liegt direkt im Assets-Order).

Die Alternative ist, dass du die TextAssets einfach irgendwo referenzierst:

public TextAsset[] levels;

und da ziehst du die Dateien dann rein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 27 Minuten schrieb Sascha:

Die Alternative ist, dass du die TextAssets einfach irgendwo referenzierst:

public TextAsset[] levels;

und da ziehst du die Dateien dann rein.

Das möchte ich eher nicht machen, weil das die Ladezeit für den Start nur nach oben zieht. Noch habe ich zwar keine 100 Levels (und selbst 100 sind dann wahrscheinlich noch nicht das Problem sein würden) aber dann müssten alle Level geladen werden und werden erst dann aufgebaut wenn sie gebraucht werden. Wenn der Spieler in Level 2 stirbt mussten trotzdem die 98 ungespielten Level geladen werden... Deswegen nehme ich lieber die Ladezeit zwischen den Leveln in Kauf als eine größere Ladezeit zu beginn.

Entweder ich bin schon zu müde oder da passt immernoch irgendwas nich:

        bool a = false;
        string json = "";

        try
        {
            json = Resources.Load<TextAsset>("/Level/Level" + player.currentLevel).text;  //hierfür bekomme ich immernoch eine NullRefference
            a = true;
        }
        catch
        {
            if (player.currentLevel == 0)
            {
                SceneManager.LoadScene("MainMenu");
            }
            else
            {
                player.currentLevel = 0;
                player.durchläufe += 0.1f;
                Time.timeScale = player.durchläufe;
                StartCoroutine(BuildLevel());
            }
        }

        if (a)
        {
            SaveObject loadObject = JsonUtility.FromJson<SaveObject>(json);
          
          [...]

Also die NullRefference kommt nur wenn ich die Zeile aus dem Try ziehe... aber die Zeile mach noch probleme...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Fehler kann manchmal echt unscheinbar sein...

Richtig:

Resources.Load<TextAsset>("Level/Level1")

Falsch:

Resources.Load<TextAsset>("/Level/Level1")

Danke dir Sascha. Du hast mir (mal wieder ;) ) echt geholfen. Ich würde dich ja mal zum Kaffee einladen aber ich wohne etwas zu weit weg -.-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein Schritt nach den anderen... :D Das Projekt habe ich jetzt innerhalb von einem Monat fertig gemacht und habe echt viel dazu gelernt. IENumerator habe ich vorher nicht genutzt. Ich habe stattdessen für jede kleinigkeit einen eigenen Timer gesetzt... 

Ich weiß endlich was mit Json anzufangen (Ich habe vorher alles in SOs gespeichert bis mir jemand gesagt hat, dass man Laufzeitdaten nicht da drin speichern kann... ;) ) und kann Jason jetzt auch im Build laden^^

Ich habe mich zum ersten Mal mit Werbung, Events und Musik/ Sound auseinander gesetzt... 

Eine Wichtige sache habe ich vor allem gelernt: Es ist meist einfach sich einen Level Editor zu programmieren als für 100 Blöcke (pro Level) die Koordinaten zusammen zu klicken. (Den ich jetzt auch irgendwann dann den Spielern zur verfügung stellen möchte) Vorher habe ich 2 Stunden gebraucht um 10 Level zusammen zu klicken, für den Level Editor habe ich alleine 2 Stunden gebraucht und kann jetzt in 5 Minuten ein Level zusammen klicken. (Wenn überhaupt)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...