Jump to content
Unity Insider Forum

Ui Button funktioniert im Unity Editor aber nicht als APK-Datei auf android


lenn0707070

Recommended Posts

Ich habe ein 2D Spiel in Unity 2020.1.15f1 erstellt. Es Gibt ein Haupt Menü und 3 Level. Geht man in den Unity Editor im Menü des Spieles auf Play, wird die erste Szene(Level1) geladen. Nun habe ich eine Apk Datei des Spieles erstellt und das ganze auf einem android versucht. Das hat aber nicht funktioniert. Ich habe den Knopf gedrückt und nichts ist passiert. Warum?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du das normale Input-Modul (eine der Komponenten, die Unity automatisch auf das GameObject "Event System" packt) benutzt, dann sollte das schon gehen. Wird nur nicht die onClick-Aktion ausgelöst und funktionieren die Animationen nicht (dass der Button etwas dunkler wird beim Drücken z.B.), oder passiert da gar nichts?

In jedem Fall empfehle ich, mal Unity Remote anzuwerfen. Die App kannst du dir im Play Store besorgen. Dann lässt du mit angeschlossenem Gerät das Spiel im Editor laufen und siehst es auf dem Handy. Den Input schickt Unity Remote auch an den Editor. Vorher musst du aber ein paar Einstellungen machen - Developer Mode auf dem Handy an und in den Editor Settings "Any Android Device" für Remote einstellen. So lassen sich die viele Probleme erkennen (wie z.B. Exceptions, die fliegen), ohne dafür mit Profiling builden zu8 müssen.

Ansonsten Development Build mit Script Debugging an und schauen, ob du auf dem Gerät eine Konsole mit Exception kriegst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man sieht, dass der Button dunkel wird wenn man ihn drückt. Also funktioniert die Funktion des Buttons nicht. Unity remote habe ich schon schon ausprobiert. Aber nur auf dem Apple Handy allerdings sollte es keinen Unterschied machen ob Samsung oder IPhone. In unity Remote klappt es. Die erste Szenen wird geladen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay, wir haben also eine plattformabhängige NRE. Das klingt für mich nach einem Problem mit der Initialisierung. Zwei Methoden (z.B. Start auf zwei Objekten) laufen in undefinierter Reihenfolge ab - im Editor zufälligerweise die eine zuerst, die eine Referenz setzt, auf Android dann zufälligerweise die andere, die die Referenz schon benötigt.

Hier gibt's was dazu zum Lesen: http://blog.13pixels.de/2019/things-that-can-make-a-difference-in-unitys-play-mode-compared-to-your-build/

Alternativ, wenn auch unwahrscheinlich, könnte ein Objekt, das referenziert wird, den Tag "Editor Only" haben und damit im Build nicht auftauchen.

Schau so oder so mal den Stacktrace der Exception an, damit du sehen kannst, wo genau die Exception fliegt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du kannst gerne Code einfügen, indem du beim Betrag-Schreiben über dem Text auf den Code-Button drückst (<>, neben dem Unity-Symbol) und da den Code einfügst :)

PlayerPrefs.Get...-Methoden geben meines Wissens nach alle einen Default-Wert zurück, wenn kein gespeicherter Wert gefunden wird. Und wenn dem nicht so sein sollte, werfen die Dinger keine NullReferenceException.

NullReferenceExceptions treten ja allermeistens dann auf, wenn vor einem Punkt ein Ausdruck steht, der zu null evaluiert (z.B. eine Variable, dessen Wert null ist, oder eine Methode, die null zurück gibt). Schauen wir also mal in deinen Code... da gibt es:

PlayerPrefs.GetInt
CoinsText.text
Coins.ToString
SceneManager.GetActiveScene()
SceneManager.GetActiveScene().buildIndex
LevelText.text
NumberOfThisScene.ToString
Debug.Log
SceneManager.LoadScene

Playerprefs, SceneManager und Debug sind Klassen, die können also nicht null sein. Bleiben nur noch:

CoinsText.text
Coins.ToString
SceneManager.GetActiveScene().buildIndex
LevelText.text
NumberOfThisScene.ToString

Wenn eine Exception fliegt, läuft die Methode nicht zuende. Wenn die Exception nicht gefangen wird, bevor sie zurück zu Unity kommt (z.B. Unity ruft Start auf, Start ruft X auf, Exception fliegt, Exception wird zurück zu Start gereicht, Exception wird zurück zu Unity gereicht), dann deaktiviert Unity das Script. Dein Button kann allerdings wunderbar Methoden auf deaktivierten Scripts aufrufen. Wenn also Start abbricht, dann ist danach irgendetwas falsch/gar nicht initialisiert.

  • CoinsText kann theoretisch null sein, aber warum sollte es das nur im Build sein? Halte ich für unwahrscheinlich. es sei denn, du hast den EditorOnly-Tag benutzt.
  • Coins kann nicht null sein - ist ein int.
  • SceneMananger.GetActiveScene() kann nicht null zurückgeben, weil Scene ein Struct ist.
  • LevelText kann null sein, aber wieder: Warum nur im Build?
  • NumberOfThisScene kann auch nicht null sein, ist auch ein int.

Kommt also alles nicht so richtig hin. Schau dir bitte mal in der Build-Konsole an, in welchem Script in welcher Zeile der Fehler auftritt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe ich gemacht! Wenn ich die App starte wird aber nicht die Debug.Log der ersten Start Funktion des GameManager ausgegeben. Damit meine ich, dass wenn ich die App Starte ich keine ausgaben in der Konsole vorfinde. Dies deutet entweder darauf hin, dass er in die Start Funktion garnicht erst rein geht oder aber das Die Console sich erst nach der Start Funktion mit dem Handy verbindet. In der Konsole muss man ja erst das gerät auf dem das spiel läuft auswählen. Man kann sich aber nur verbinden wenn das Spiel läuft daher kann es sein das ich mich mit dem handy erst nach der Ausführung der Start Funktion verbunden hab, weshalb nichts ausgegeben wird. Als ich dann auf dem Knopf gedrückt habe wurden die Debug.Logs der OnClickPlayButtun-Funktion ausgegeben

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...