Wie kann ich den Text alle zehn Sekunden verändern?

1 Antwort

In Kombination mit dem Time.deltaTime-Property kann man sich leicht einen Timer basteln.

private float _delay = 10f;
private float _timer = 0f;

void Update()
{
  _timer += Time.deltaTime;

  if (_timer > _delay)
  {
    _timer -= _delay;
    // change text or do something else ...
  }
}
FabiWu22 
Fragesteller
 18.12.2022, 11:05

Funktioniert nicht hier nocheinmal der Code:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;




public class AutomaticPointsSystem : MonoBehaviour

{

 

 private float _delay = 10f;

 private float _timer = 0f;

 

 

 

   

    void Update()

    {

     _timer += Time.deltaTime;

 

      if (_timer > _delay)

      {

      _timer -= _delay;

     

      pointTextScript.pointAmount += 10;

 

      }

    }
}
Dann das 2. Skript
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class pointTextScript : MonoBehaviour

{

   Text text;

   public static int pointAmount = 0;

   




    void Start()

    {

   text = GetComponent<Text> ();    

    }

 

 

    void Update()

    {

      text.text = pointAmount.ToString();  

     

 

    }
}
Die beiden sind auf dem Text als Copnente drauf
0
regex9  18.12.2022, 11:16
@FabiWu22
Funktioniert nicht (...)

Hilft dir diese Art der Fehlerbeschreibung weiter? 🤔

Dann das 2. Skript

Wieso sind überhaupt zwei Skripte nötig? Wieso ist pointAmount statisch?

0
FabiWu22 
Fragesteller
 18.12.2022, 11:25
@regex9

Also ich habe alles in ein Skript gepackt aber es funktioniert immer noch nicht. Damit meine ich das er nach 10 Sekunden nicht die 10 ""Punkte" addiert.

Was meinst du mit

Wieso ist pointAmount statisch ?

Woran liegt es das er nichts addiert ?

0
regex9  18.12.2022, 20:41
@FabiWu22

Ich würde schauen, ob das Skript überhaupt ausgeführt bzw. die Update-Methode aufgerufen wird. Es kann ja sein, dass es nicht aktiv ist. Am besten lässt sich der Programmverlauf mit dem Debugger prüfen.

Was meinst du mit (...)

Ich meine die Frage so, wie sie dort steht. Es muss ja einen gewissen Grund für deine Entscheidungen im Code geben. Wenn du den static-Modifier nur dazu missbrauchst, um einfach von überall Zustände ändern zu können, baust du dir schnell eigene Fallen. Es könnte beispielsweise sein, dass du die Variable unbeabsichtigt parallel noch woanders änderst.

0
apophis  26.12.2022, 04:54

_timer sollter eher auf 0 gesetzt werden, anstatt nur _delay von ihm abzuziehen.
Da _timer nur selten einen Wert von genau 10 hat, wird die Variable nach Abzug von _delta immer einen positiven Wert haben.
Sprich beim nächsten Durchlauf startet _timer nicht bei 0, sondern z.B. bei 0.352, wodurch der Timer letztendlich weniger als 10s hochzählt.

Bei einem so "groben" Zeitfenster wie 10 Sekunden wird man das nicht bemerken,
bei kleineren Zeitfenstern kann das aber zu ungewollten Problemen führen.

Natürlich kann man jetzt sagen "hier ist es ja egal", aber warum etwas zweimal lernen, wenn man es einmal für alles Situationen richtig lernen kann. :)

0