2016-08-30 3 views
0

Ich weiß nicht, wie man einen Befehl laufen zu lassen, dann wird die Zeit gestoppt hier ist der Code:Wie wird der Befehl ausgeführt, dann wird der Timer beendet? C#

using UnityEngine; 
using System.Collections; 
using UnityEngine.SceneManagement; 
using System.Threading; 
using System; 

public class introtogamescript : MonoBehaviour 
{ 
    public class Example 
    { 
     public static void Main() 
     { 
      // Create an instance of the Example class, and start two 
      // timers. 
      Example ex = new Example(); 
      ex.StartTimer(7000); 
     } 

     public void StartTimer(int dueTime) 
     { 
      Timer t = new Timer(new TimerCallback(TimerProc)); 
      t.Change(dueTime, 0); 
     } 

     private void TimerProc(object state) 
     { 
      // The state object is the Timer object. 
      Timer t = (Timer)state; 
      t.Dispose(); 
      SceneManager.LoadScene(2); 
     } 
    } 
} 

Danke für die Hilfe.

+1

Wenn der Timer wirklich gerade ist eine Verzögerung, die Sie in Einheit einfacher machen können, z. mit 'Invoke' oder, wenn Sie Parameter übergeben müssen, eine' coroutine'. –

+0

Es funktioniert viel besser DANKE, aber es ist nicht wirklich nützlich in dieser Verzögerung, weil ich nicht weiß, wie man es auf diese Weise verwendet :( –

+0

@coproGames überprüfen Sie meine Antwort wird es Ihnen helfen. –

Antwort

1

Sie können coroutines wie folgt verwenden:

public void WaitAndExecute(float timer, Action callBack = null) 
{ 
    StartCoroutine(WaitAndExecute_CR(timer,callBack)); 
} 

IEnumerator WaitAndExecute_CR(float timer, Action callBack = null) 
{ 
    yield return new WaitForSeconds(timer); 

    if (callBack != null) 
    { 
     callBack(); 
    } 
} 


void Start() 
{ 
    WaitAndExecute(5,() => {Debug.Log("This will be printed after 5 seconds");}); 

    WaitAndExecute(10,JustAnotherMethod); 
} 

void JustAnotherMethod() 
{ 
    Debug.Log("This is another way to use callback methods"); 
} 
+0

Du schaukelst DANKE: D –

0

Wenn Sie den Timer starten, verwenden Sie lambdas oder anonyme Delegate - auf diese Weise haben Sie den Timer als Abschluss.

+0

ich hätte gerne ein Beispiel, um deinen Punkt komplett zu bekommen –

0

Sie auch Invoke verwenden können (string methoden, float callDelay)

Beispiel:

void SomeMethod() 
{ 
    Invoke("OtherMethod",3.5f); 
} 

//It should be called 3.5 seconds after SomeMethod 
void OtherMethod() 
{ 
    print(something); 
} 

Und Sie können nicht aufrufen irgendein Parameter

Verwandte Themen