Jump to content
Unity Insider Forum

GuiText update - Newbiefrage


Recommended Posts

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

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

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

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

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


//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

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

Archiviert

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

×
×
  • Neu erstellen...