Phash Geschrieben 11. August 2014 Melden Share Geschrieben 11. August 2014 Servus ich probier hier gerade seit 2 Stunden an einem Gui-Text herum, hab ca. 20 verschiedene Tutorials und Howtos auf YT geguckt und einiges gelesen, aber irgendwie komm ich einfach nicht weiter - Knoten im Hirn. Ich habe vorhin die Tutorials für den 3D SideScroller hier auf der Seite angesehen, und versuche das ganze nachzubauen. Das klappt auch soweit. Ich habe eine C# Datei erstellt, in der das Tag "Respawn" erfolgreich ausgelesen wird (zumindest macht es, was es soll - das Level neu Laden) nun möchte ich ein anderes Tag hinzufügen, und bei erreichen dieses Tags einen Text updaten. Punkte addieren. Der GuiText wird mir angezeigt, allerdings wirds nicht geupdated, und ich hab gerade keine Ahnung mehr, was ich wo hin ziehen muss, was ich womit verknüpfen muss und wie ich dann an die Referenz auf das GuiText Objekt komme... HILFE! Ich habe in meiner Hierarchy ein GuiText Element. Es heisst scoreText. ich habe es links oben in die Ecke geschoben. Ausserdem habe ich ein C# Script: ScoreCounter. In diesem habe ich eine Funktion void OnControllerColliderHit(ControllerColliderHit hit){ if (hit.gameObject.tag == "Finish"){ ScoreText.text = "" + 1; } if (hit.gameObject.tag == "Respawn"){ Application.LoadLevel(0); } } Respawn respawned das aktuelle Level. Finish macht leider nichts... die komplette Klasse: public class ScoreCounter : MonoBehaviour { public GUIText ScoreText; public int score; // Use this for initializatio void Start () { ScoreText.text = "HEINZ"; } // Update is called once per frame void Update () { } void OnControllerColliderHit(ControllerColliderHit hit){ if (hit.gameObject.tag == "Finish"){ ScoreText.text = "" + 1; } if (hit.gameObject.tag == "Respawn"){ Application.LoadLevel(0); } } } was muss ich noch machen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
John Geschrieben 11. August 2014 Melden Share Geschrieben 11. August 2014 Hallo Phash, Das Problem was ich hier sehe ist das du immer, sagst wen er finish erreicht das "1" ScoreText.text ist; Du hast hier folgende variablen: public GUIText ScoreText; //Dies ist wichtig!! public int score; //Hier ist das Problem if (hit.gameObject.tag == "Finish"){ //Hier add du die zahl 1 auf dein score also heißt, wenn du 3 hast und finish erreichst das du dan 4 hast score += 1; //Hier war dein fehler dirn du gehst immer von der 1 aus. Schreibst du aber score hin so wird er dir dan dein Score hochzählen wen du was erreichst ScoreText.text = "" + score ; } Mfg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Phash Geschrieben 11. August 2014 Autor Melden Share Geschrieben 11. August 2014 Das Problem ist leider nicht so einfach. in meinem o.g. Code ist noch keine Count-Funktionalität enthalten. Das einzige, was mein Code machen würde, wenn er denn ginge: Den Score Text auf "Heinz" initialisieren, und bei Finish den ScoreText auf "1" ändern. Er initialisiert jedoch nicht, und ändert auch nicht auf 1 - Ich habs mal hier mit count gemacht, allerdings ist das wirklich nicht das Problem - das Problem ist, dass ich scheinbar keine (oder die falsche) Objektreferenz auf meinen GuiText habe using UnityEngine; using System.Collections; public class ScoreCounter : MonoBehaviour { public GUIText scoreText ; public int score = 5; // Use this for initializatio void Start () { //scoreText = GameObject.Find("scoreText"); // guiText; } // Update is called once per frame void Update () { UpdateScore (); } void UpdateScore(){ scoreText.text = "Score " + score; } void OnControllerColliderHit(ControllerColliderHit hit){ if (hit.gameObject.tag == "Finish"){ scoreText.text = "GEWONNEN"; } if (hit.gameObject.tag == "Respawn"){ score = 0; Application.LoadLevel(0); } if (hit.gameObject.tag == "addPoints"){ score++; UpdateScore(); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
John Geschrieben 11. August 2014 Melden Share Geschrieben 11. August 2014 Ja das ist besser das Script ich sehe du musst noch auf dein "GUIText" zugreifen. using UnityEngine; using System.Collections; public class Test : MonoBehaviour { GUIText guiText; int punkte; void Start () { //Das hier ist wichtig damit du eine verbindung zu deiner Scnen gui aufstellst // kommt drauf an wo hast du genau dein script drauf? guiText = gameObject.GetComponent<GUIText>(); } void Update () { punkte++; guiText.text = "Couter" + punkte; } } Mfg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Phash Geschrieben 11. August 2014 Autor Melden Share Geschrieben 11. August 2014 Ich habe eine "Kugel" als Spieler. Diese Kugel hat den ScoreText (warum weiss ich aber auch nicht...) und das Script Also Kugel hat Script ScoreCounter ScoreText in im HierachyRoot und hat auch das ScoreCounter Script. Ich habe irgendeinen Wurm bei den Zuweisungen. Kannst du mir vielleicht die einzelnen Schritte verraten, wie ich aus "Kugel als Spieler" und "Plattform als Trigger" einen GuiText hinbekomme? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
John Geschrieben 11. August 2014 Melden Share Geschrieben 11. August 2014 //Das ist mein Object wo guiText drauf liegt public GameObject guiTextComponent; GUIText myGUIText; void Start() { myGUIText = guiTextComponent.GetComponent<GUIText>(); } void Update() { myGUIText.text = "Okay wurde gefunden"; } Du ziehst dan deine Kugel einfach in den GameObject space in deinem Inspector Mfg Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Phash Geschrieben 12. August 2014 Autor Melden Share Geschrieben 12. August 2014 Danke, werd ich heute mal ausprobieren... bin nur den ganzen Tag in München und komm nicht dazu was sinnvolles zu machen *g* Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Phash Geschrieben 14. August 2014 Autor Melden Share Geschrieben 14. August 2014 Servus und kurzes Update. Vornweg: jetzt gehts! Aber wie kam es dazu? Ich habe vergessen, meinen Spieler als PreFab zu definieren (also habe ich ihn nicht aus der Hierarchie in das Projekt gezogen) Ausserdem hatte ich in meinem Script keine öffentliche GUIText Variable (ich komm aus der JavaEE Welt, und meine Variablen sind alle private...) Ich habe nun meinen Spieler als PreFab definiert, und dort dann das Script reingezogen. In der Script-Sektion sind dann alle (public) Variablen sichtbar, und auf diese Variable muss man den GUIText ziehen. Damit ist eine Referenzierung innerhalb des Scripts geschehen, und man kann die Variable einfach verwenden. 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.