Elharter Geschrieben 24. Juni 2016 Melden Share Geschrieben 24. Juni 2016 Hallo, ich habe ein seltsames Problem. Ich habe verschiedene Scripte die "Labels/Text/GUI" befüllen. Es ist immer das selbe GUI mit den selben Labels > Siehe Screenshot. Ich befülle Username, Bestround, Lastround erfolgreich immer in der selben Vorgehensweise. public UILabel lastlaptime; (ist ein UILabel Script) public UILabel bestlaptime;(ist ein UILabel Script) Im Inspector ziehe ich das GameObject an die passende Stelle > alles wunderbar, funktioniert. Jetzt wollte ich das - wie 3x zuvor genauso für die Rundenanzeige durchführen. In dem dazugehörigen Script. Label: round_player public UILabel roundText; (ich schreibe die aktuelle Runde im Checkpoint Script) using UnityEngine; using UnityEngine.UI; using System.Collections; public class checkpoint : MonoBehaviour { public UILabel roundText; //public Text laptimeText; public Transform playerTransform = null; void Start () { } void OnTriggerEnter ( Collider other ) { //Debug.Log("own:"+transform.position); //Debug.Log("currentCheckpoint:"+Laps.checkpointA[Laps.currentCheckpoint].transform.position); if (other.gameObject.tag == "Player") { //Debug.Log("Trigger detected"); //Is it the Player who enters the collider? //if (!other.CompareTag ("Player")) // return; //If it's not the player dont continue if (transform == Laps.checkpointA[Laps.currentCheckpoint].transform) { //Debug.Log ("it IS the player"); //Check so we dont exceed our checkpoint quantity if (Laps.currentCheckpoint + 1 < Laps.checkpointA.Length) { //Add to currentLap if currentCheckpoint is 0 if (Laps.currentCheckpoint == 0) { Laps.currentLap++; if (Laps.timeStarted == false) { Laps.timeStarted = true; Laps.finished = false; } else { Laps.finished = true; } } Laps.currentCheckpoint++; } else { //If we dont have any Checkpoints left, go back to 0 Laps.currentCheckpoint = 0; } roundText.text = "Round:" + Laps.currentLap +"/0 (" + Laps.currentCheckpoint + ")"; //laptimeText.text = "Checkpoint: " + Laps.currentCheckpoint + " Lap: " + Laps.currentLap; } } } } Ich erhalte eine NullReferenceException. NullReferenceException: Object reference not set to an instance of an object checkpoint.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts/checkpoint.cs:57) Hinweis: bastel ich das selbe mit "public Text laptimeText;" lege dazu ein UI-Text Element an, ziehe es im Inspector drauf und kommentiere Zeile 52 aus und aktiviere Zeile 53 funktioniert das problemlos. Versteh ich nicht. Wieso??? danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 24. Juni 2016 Autor Melden Share Geschrieben 24. Juni 2016 Achja und noch einen interessanten Effekt habe ich: er schreibt den Text trotz der Exception in das Label hinein..... *verwirrung* Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TobLine Geschrieben 24. Juni 2016 Melden Share Geschrieben 24. Juni 2016 roundtext ist im Inspector zugewiesen? wennst if(roundtext!=null) davor machst geht die exception weg? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 24. Juni 2016 Autor Melden Share Geschrieben 24. Juni 2016 Ja - ist zugewiesen. LÖLI ! ja geht tatsächlich weg.... Label wird trotzdem korrekt gefüllt. Jetzt versteh ich gar nichts mehr. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
TobLine Geschrieben 24. Juni 2016 Melden Share Geschrieben 24. Juni 2016 Ist das Label noch nicht bereit wenn OntriggerEnter aufgerufen wird? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
devandart Geschrieben 24. Juni 2016 Melden Share Geschrieben 24. Juni 2016 Wenn es im Inspector zugewiesen ist, ist es auch bereit, wenn OnTriggerEnter aufgerufen wird. Wird dein Label auch gefüllt, wenn Du die Zeile auskommentierst? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 24. Juni 2016 Autor Melden Share Geschrieben 24. Juni 2016 Sollte rein logisch bereit sein - ja. Es tritt auch auf wenn ich erst 3sek später mit dem Auto losfahre wo alles geladen sein sollte. @devandart: nein - wird dann nicht gefüllt. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hrungdak Geschrieben 26. Juni 2016 Melden Share Geschrieben 26. Juni 2016 Hast du schon mal da hin debugged? Vielleicht ist ja nicht das GUI Element Null, sondern was anderes? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 26. Juni 2016 Melden Share Geschrieben 26. Juni 2016 Tja, wenn man wüsste was in der Zeile 57 drin steht.. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Bastiuscha Geschrieben 26. Juni 2016 Melden Share Geschrieben 26. Juni 2016 Tja, wenn man wüsste was in der Zeile 57 drin steht.. Er meint die letzten beiden Zeilen. Ich habe durchgezählt, weil ichs wissen wollte. ;D Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hrungdak Geschrieben 27. Juni 2016 Melden Share Geschrieben 27. Juni 2016 Kann auch sein, dass dein UILabel keine Text-Eigenschaft hat. Du hast einen Haufen Debug.Log Zeilen drin, mach doch mal vor der Zeile mit dem Fehler ein Debug.Log und lass dir ausgeben, ob roundText != null, roundText.text != null, und Lap != null. Alternativ: string message = "Round:" + Laps.currentLap +"/0 (" + Laps.currentCheckpoint + ")"; roundText.text = message; Dieses an und für sich überflüssige Konstrukt zeigt dir, ob der Fehler in der ersten oder zweiten Zeile auftritt. In der ersten Zeile: Fehler liegt in Laps. Zweite Zeile: Fehler liegt in roundText. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 27. Juni 2016 Autor Melden Share Geschrieben 27. Juni 2016 Kann auch sein, dass dein UILabel keine Text-Eigenschaft hat. Du hast einen Haufen Debug.Log Zeilen drin, mach doch mal vor der Zeile mit dem Fehler ein Debug.Log und lass dir ausgeben, ob roundText != null, roundText.text != null, und Lap != null. Alternativ: string message = "Round:" + Laps.currentLap +"/0 (" + Laps.currentCheckpoint + ")"; roundText.text = message; Dieses an und für sich überflüssige Konstrukt zeigt dir, ob der Fehler in der ersten oder zweiten Zeile auftritt. In der ersten Zeile: Fehler liegt in Laps. Zweite Zeile: Fehler liegt in roundText. Habe das genau so probiert. Ergebnis: NullReferenceException: Object reference not set to an instance of an object checkpoint.OnTriggerEnter (UnityEngine.Collider other) (at Assets/Scripts/checkpoint.cs:59) 58:string message = "Round:" + Laps.currentLap + "/0 (" + Laps.currentCheckpoint + ")"; 59:roundText.text = message; UILabel Class Beschreibung ist hier: http://www.tasharen.com/ngui/docs/class_u_i_label.html Auszug: string UILabel.text getset Text that's being displayed by the label. Und das witzige ist, ich verwende es ja genauso an 3 anderen Stellen wo es klaglos funktioniert. Noch seltsamer ist dass trotz Exception alles angezeigt wird - bis auf die Anzahl der Checkpoints (Laps.currentCheckpoint). Habe auch testweise Laps.currentCheckpoint rausgenommen.... ändert nichts. Was mir noch aufgefallen ist, die Exception kommt erst beim durchführen des 2ten Checkpoints Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hrungdak Geschrieben 27. Juni 2016 Melden Share Geschrieben 27. Juni 2016 Nachdem jetzt feststeht, dass roundText der böse Bube ist: vor die Zeile 59: Debug.Log("roundText is null: " + roundText == null); Da kommt dann mit Sicherheit "true" raus. Die entscheidende Info ist, dass der Fehler erst beim zweiten Checkpoint kommt. Dazwischen muss dann halt der roundText genullt werden. Irgendwo. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 28. Juni 2016 Autor Melden Share Geschrieben 28. Juni 2016 http://www.bilder-upload.eu/show.php?file=1687cd-1467112976.jpg nope.... ist false.... siehe screenshot. Bin durch 3 Checkpoints gefahren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 28. Juni 2016 Autor Melden Share Geschrieben 28. Juni 2016 Ok....ich habe mir jetzt einen erweiterten LogViewer installiert (https://www.assetstore.unity3d.com/en/#!/content/12047) Dort sehe ich schon beim starten der Scene (Play) folgenden Fehler: NullReferenceException: (null) UnityEditor.SerializedObject..ctor (UnityEngine.Object[] objs) (at C:/buildslave/unity/build/artifacts/generated/common/editor/SerializedPropertyBindings.gen.cs:74) UnityEditor.Editor.GetSerializedObjectInternal () (at C:/buildslave/unity/build/artifacts/generated/common/editor/EditorBindings.gen.cs:154) UnityEditor.Editor.get_serializedObject () (at C:/buildslave/unity/build/artifacts/generated/common/editor/EditorBindings.gen.cs:147) NGUITransformInspector.OnEnable () (at Assets/NGUI/Scripts/Editor/NGUITransformInspector.cs:23) Könnte mir vorstellen dass dieser Fehler zum anderen führt. Ich versuche mal diesen Fehler weg zu bekommen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Hrungdak Geschrieben 29. Juni 2016 Melden Share Geschrieben 29. Juni 2016 Und dieser Fehler ist nicht in der Console aufgetaucht? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 29. Juni 2016 Autor Melden Share Geschrieben 29. Juni 2016 Nein....nicht im Editor....nur im Developer-Build.... das hab ich gegooglet und gefunden dass es bei der Console-Ausgabe Unterschiede gibt. So bin ich auf den LogViewer gekommen der die selben Fehler ausgibt (zusätzlich) wie auch im DevBuild. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 29. Juni 2016 Melden Share Geschrieben 29. Juni 2016 Ich sehe gerade, dass eine NGUI Meldung dabei ist. Du nutzt also NGUI und nicht UGUI. Hast du denn auch die aktuelle NGUI Version drauf? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 29. Juni 2016 Autor Melden Share Geschrieben 29. Juni 2016 Ich nutze NGUI genau ja... Ist UGUI besser? Werd ich sofort checken. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 29. Juni 2016 Melden Share Geschrieben 29. Juni 2016 Also als du deinen Startpost geschrieben hast, hast du in deinem Code UGUI (Unity's neue GUI) genutzt. Du nutzt jetzt zusätzlich NGUI, oder hast du umgestellt? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 29. Juni 2016 Autor Melden Share Geschrieben 29. Juni 2016 Wo habe ich das geschrieben??? Meinst du wegen dem "UILabel" ? Das sind Scripte die von dem NGUI kommen. Jaja ich nutze nur NGUI, nichts anderes.... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Tiwaz Geschrieben 29. Juni 2016 Melden Share Geschrieben 29. Juni 2016 Also als du deinen Startpost geschrieben hast, hast du in deinem Coude UGUI (Unity's neue GUI) genutzt. roundText ist ein UILabel, die uGUI Komponenten sind auskommentiert und kommen da nicht vor. Ich nutze NGUI genau ja... Ist UGUI besser? Also ich schreibe zu einem Vergleich zwischen den beiden gerade eine Bachelorarbeit (der praktische Teil ist abgeschlossen, jetzt muss ich das nur noch in eine schriftliche Arbeit verpacken ^^) und ich würde in fast jedem Fall uGUI empfehlen. Argumente für uGUI: - Bei einem vergleichbaren Knowhow zu den beiden Frameworks kommt man mit uGUI schneller ans Ziel, weil mittlerweile vieles Out-of-the-Box läuft und nicht viel konfiguriert werden muss (dadurch bleibt auch das Projekt sauberer, weil weniger Komponenten rumliegen). Das sieht man besonders bei Scrollviews/Grids und Sprite-Atlanten - Dahinter steht ein großes Entwicklerteam - Es ist performanter (Erzeugt auch weniger Tris/Verts, Batches und Setpass Calls) - Das (Event)System ist besser erweiterbar und man kann das Verhalten der UI einfacher kontrollieren Das einzige Argument das man gegen uGUI und für NGUI bringen könnte wäre - meiner Meinung nach -, dass man in uGUI mehr programmieren muss, um es auch voll auszunutzen. Gerade so Drag-and-Drop Geschichten muss man selber implementieren, da gibt's in NGUI schon was vorgefertigt. Tweening kann man auch easy selber schreiben oder - wie z.B. auch das in uGUI fehlende Lokalisierungssystem - im Asset Store free laden. Bist du ein programmierscheuer Designer und allein im Team, dann wäre wohl NGUI die bessere Variante. Für alles andere wäre imo uGUI besser. Das Unternehmen bei dem ich die Bachelorarbeit absolviere steigt demnächst übrigens auch von NGUI auf uGUI um. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 29. Juni 2016 Autor Melden Share Geschrieben 29. Juni 2016 Mhhh ich bin nicht unbedingt "Programmierscheu" mehr aber dann doch "kein Profi"... außerdem mache ich in der Tat das meiste alleine und kriege nur selten Unterstützung. Die "einfachheit" mit NGUI hat mich überzeugt deshalb hatte ich das genommen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 29. Juni 2016 Melden Share Geschrieben 29. Juni 2016 Dieses hier: using UnityEngine.UI; hast du in deinem Startpost verwendet. Das lässt mich vermuten, dass du UGUI nutzen willst. Aber nochmal zum Problem. Hast du die aktuelle Version von NGUI drauf? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 29. Juni 2016 Autor Melden Share Geschrieben 29. Juni 2016 Stimmt... vermutlich hatte ich das noch aus einer VorVersion drin.... Nein, habe gesehen es ist Version: 3.9.9 aktuell. Ich habe 3.9.7 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.