2016-07-28 18 views
0

Hallo Ich habe ein C# -Skript geschrieben, das ich dann in einem anderen Skript aufrufen kann, um die verbleibende Zeit zwischen verschiedenen Szenen zu verfolgen und dann eine Szene zu laden, wenn der Timer 0 erreicht Glauben Sie, dass beide Skripte richtig geschrieben sind, aber es gibt keine Aktion, wenn der Timer 0 erreicht. Ich denke, das Problem ist, dass ich den Code nicht an der richtigen Stelle platziere, aber ich bin mir nicht sicher, ich habe versucht, es hinzuzufügen zu meiner Startfunktion und meiner Update-Funktion.Unity C# Countdown um durch Szenen zu bleiben

Hier ist das Skript für die statische Klasse;

public static class GlobalCountDown 
{ 
    static DateTime TimeStarted; 
    static TimeSpan TotalTime; 

    public static void StartCountDown(TimeSpan totalTime) 
    { 
     TimeStarted = DateTime.UtcNow; 
     TotalTime = totalTime; 
    } 

    public static TimeSpan TimeLeft 
    { 
     get 
     { 
      var result = DateTime.UtcNow - TimeStarted; 
      if (result.TotalSeconds <= 0) 
       SceneManager.LoadScene("Lose"); 
       return TimeSpan.Zero;   
       //return result; 
     } 
    } 
} 

Und hier ist der Anruf, den ich in jeder Spielszene mache, um die verbleibende Zeit zu überprüfen;

GlobalCountDown.StartCountDown (TimeSpan.FromSeconds (5)); 

Ich erhalte eine Warnung, wenn das Skript ‚privaten Bereich` GlobalCountDown.TotalTime‘Kompilieren zugewiesen, aber sein Wert wird nie benutzt‘, aber ist nicht sicher, wie es zu beheben.

Jede Hilfe oder Beratung wäre willkommen.

Antwort

2

Ändern Sie diese

var result = DateTime.UtcNow - TimeStarted; 

Zu diesem

var result = TotalTime - (DateTime.UtcNow - TimeStarted); 

In Ihrem Verhalten tun, um diese

void Start() 
{ 
    GlobalCountDown.StartCountDown (TimeSpan.FromSeconds (5)); 
} 

void Update() 
{ 
    if (GlobalCountDown.TimeLeft == TimeSpan.Zero) 
     SceneManager.LoadScene("Lose"); 
} 

und entfernen Sie den Scenemanager Code aus Ihrer GlobalCountDown Klasse