Kann man in Unity nach Sekunden abfragen?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du kannst du Klasse Time aus dem Unity Framework nutzen um die Zeit zu stoppen. Das könnte etwa so aussehen:

private float timePassed = 0.0f;

void Update() //wird bei jedem Frame aufgerufen
{
  time += Time.deltaTime; //addiert die vergange Zeit seit dem letzten Frame
  if (timePassed >= 30) //wenn 30 Sekunden vergangen sind
  {
    if (timePased % 0.5 == 0) //und die Zeit durch 0.5 teilbar ist
    {
      //hier deine Meteoriten spawnen
    }
  }
} 

In der timePassed Variable merkst du dir die vergangene Zeit. Die Variable wird bei jeden Frame aktualisiert. Ist der Wert durch 0,5 teilbar, ist eine halbe Sekunde vergangen.

Woher ich das weiß:Hobby
Kiboman  30.08.2019, 13:31

Warum das Rad neu erfinden wenn C# die richtigen Werkzeuge an Board hat.

https://docs.microsoft.com/de-de/dotnet/api/system.timers.timer?view=netframework-4.8

0
Knomle  30.08.2019, 13:33
@Kiboman

Weil die deltaTime sowieso berechnet wird und du sie nur abfragen musst. Ein neuer Timer kostet zusätzliche Ressourcen. Es würde natürlich auch mit dem System.Timers.Timer gehen, da geb ich dir recht. :-)

LG Knom

0
Kiboman  30.08.2019, 13:39
@Knomle

Das müsste man mal ausprobieren

ich persönlich gehe stark davon aus dass die Überprüfung bei jedem frame mehr Ressourcen frisst als die Timer Klasse

Zumal die Überprüfung in dem frame task im mainthread läuft

die Timer Klasse könnte man sogar auf eine eigenen thread verschieben

1
regex9  30.08.2019, 16:21
@Kiboman

Eine Neuerfindung des Rads ist diese Lösung eigentlich nicht, sondern eher eine Anpassung an das ECS, auf welchem der Prozess in Unity beruht (daher wird es in den Unity Tutorials auch mit angesprochen: Delta Time).

Bei der Verwendung von Threads hingegen sollte man hier vorsichtig sein, da die Unity API-Zugriffe nicht thread-safe sind.

1

Erstelle ein Funktion die du nach 30 Sekunden aufrufst und benutze InvokeRepeating("Funktion",30f,0.5f); in Start();

Woher ich das weiß:Berufserfahrung

Coroutinen wären ein guter Weg, dein Problem zu lösen.