2017-02-22 5 views
0

5秒または10秒後に、トリガ(レースの終了)に入るレベルを再開したいと考えています。継続時間の後の再トリガ・レベルのトリガ

私は次のようになりスクリプトがあります。

public class WinBox : MonoBehaviour 
{ 
    public Camera Camera1; 
    private void OnTriggerEnter(Collider other) 
    { 
     GameObject.Find("Camera (eye)").SendMessage("StopTimer"); 
    } 
} 

は私が定義する時間後にレベルの再起動をするために何を追加する必要がありますか?

答えて

3

static class Utils 
{ 
    public static IEnumerator DoAfterDelay(float delay, System.Action callback) 
    { 
     yield return new WaitForSeconds(delay); 
     callback(); 
    } 
} 

そして私の経験から、この

private void RestartLevel() 
{ 
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); 
} 

private void OnTriggerEnter(Collider other) 
{ 
    GameObject.Find("Camera (eye)").SendMessage("StopTimer"); 
    float secondsUntilRestart = 10; 
    StartCoroutine(Utils.DoAfterDelay(secondsUntilRestart, RestartLevel)); 
} 

同様StartCoroutineでそれを呼び出し、多くの場合、あなたこのDoAfterDelayの機能が必要です。そのため、私はそれをローカルのプライベートメソッドにする代わりに、別のクラスに置きます。

+0

それは素晴らしい作品です! Scene Managerを使用するために、スクリプトの先頭に「UnityEngine.SceneManagement;を使用する」を追加する必要がありました –

3

coroutinesを使用すると、SceneManagerの呼び出しを遅らせることができます。 LoadScene機能、現在のシーンについての情報を取得するGetActiveScene機能と一緒に:

private IEnumerator RestartSceneAfterDelay(float delay = 10f) 
{ 
    yield return new WaitForSeconds(delay); 
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex) ; 
} 

をそして次のように関数を呼び出す:

private void OnTriggerEnter(Collider other) 
{ 
    GameObject.Find("Camera (eye)").SendMessage("StopTimer"); 

    StartCoroutine(RestartSceneAfterDelay()) ; 
    // OR 
    StartCoroutine(RestartSceneAfterDelay(5f)) ;  
} 

他のソリューション(ただしほど良好ではありません最初のもの)は、Invoke関数を使用してシーンマネージャへの呼び出しを遅延させることです。ただし、関数への呼び出しは後でデバッグすることが困難な文字列から行われるため、この方法は避けてください。あなたは、このようなユーティリティ関数を作ることができる遅延の後に何かをする

private void RestartScene() 
{ 
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex) ; 
} 

private void OnTriggerEnter(Collider other) 
{ 
    GameObject.Find("Camera (eye)").SendMessage("StopTimer"); 

    Invoke("RestartScene", 5f) ; 
} 
+0

それはまた素晴らしい作品です! –

関連する問題