Heim > Backend-Entwicklung > C++ > Wie kann man einfach ein Skript in Einheit warten/schlafen?

Wie kann man einfach ein Skript in Einheit warten/schlafen?

DDD
Freigeben: 2025-01-31 13:11:09
Original
859 Leute haben es durchsucht

How to Simply Make a Script Wait/Sleep in Unity?

Einheitskript Warten/Aufhängung mehrerer Methoden

Einheit bietet eine Vielzahl von Methoden, um Skripte zu warten oder zu pausieren.

<.> 1. verwenden Sie Korrektur und

Dies ist die einfachste und direkte Methode. Setzen Sie den Code ein, den Sie in der Coroutine -Funktion warten müssen, und verwenden Sie die angegebene Wartezeit WaitForSeconds. Denken Sie daran, dass die Coroutine -Funktion mit gestartet werden muss.

WaitForSeconds <.> 2. verwenden Sie Korrektur und StartCoroutine(yourFunction)

<code class="language-C#">private void Start()
{
    StartCoroutine(Waiter());
}

private IEnumerator Waiter()
{
    // 旋转 90 度
    transform.Rotate(new Vector3(90, 0, 0), Space.World);

    // 等待 4 秒
    yield return new WaitForSeconds(4);

    // 旋转 40 度
    transform.Rotate(new Vector3(40, 0, 0), Space.World);

    // 等待 2 秒
    yield return new WaitForSeconds(2);

    // 旋转 20 度
    transform.Rotate(new Vector3(20, 0, 0), Space.World);
}</code>
Nach dem Login kopieren
Der Unterschied zwischen

und besteht darin, dass es eine unfare Zeit zum Warten verwendet. WaitForSecondsRealtime

<.> 3. Verwenden Sie Coroutine und

Wartezeit WaitForSecondsRealtime WaitForSeconds Time.timeScale Diese Methode eignet sich für Szenen, die Wartezeit wie Timer anzeigen müssen. Es ermöglicht auch Interrupt -Operationen während des Wartenprozesses. WaitForSecondsRealtime

<code class="language-C#">private void Start()
{
    StartCoroutine(WaiterRealtime());
}

private IEnumerator WaiterRealtime()
{
    // 旋转 90 度
    transform.Rotate(new Vector3(90, 0, 0), Space.World);

    // 等待 4 秒 (不受 Time.timeScale 影响)
    yield return new WaitForSecondsRealtime(4);

    // 旋转 40 度
    transform.Rotate(new Vector3(40, 0, 0), Space.World);

    // 等待 2 秒 (不受 Time.timeScale 影响)
    yield return new WaitForSecondsRealtime(2);

    // 旋转 20 度
    transform.Rotate(new Vector3(20, 0, 0), Space.World);
}</code>
Nach dem Login kopieren
Einfache Version, trennen Sie den Timer in eine unabhängige Coroutine:

Time.deltaTime <.> 4. Verwenden Sie Korrektur und Funktion

Warten auf bestimmte Bedingungen. Warten Sie beispielsweise, bis der Spielerwert 100 Punkte erreicht, bevor Sie das nächste Level laden.
<code class="language-C#">private bool quit = false;

private void Start()
{
    StartCoroutine(WaiterWithTimer());
}

private IEnumerator WaiterWithTimer()
{
    float counter = 0;
    float waitTime = 4;
    while (counter < waitTime)
    {
        counter += Time.deltaTime;
        Debug.Log("已等待时间:" + counter + " 秒");
        if (quit) yield break;
        yield return null;
    }
    // ... 剩余代码 ...
}</code>
Nach dem Login kopieren

<.> 5. Verwenden Sie Korrektur und
<code class="language-C#">private bool quit = false;

// ... (WaiterWithTimer 函数) ...

private IEnumerator WaitTimer(float waitTime)
{
    float counter = 0;
    while (counter < waitTime)
    {
        counter += Time.deltaTime;
        Debug.Log("已等待时间:" + counter + " 秒");
        if (quit) yield break;
        yield return null;
    }
}</code>
Nach dem Login kopieren
Funktion

WaitUntil auf bestimmte Bedingungen warten, wird nicht erfüllt. Warten Sie beispielsweise darauf, dass der Spieler die ESC -Taste drückt und das Spiel beendet.

<.> 6. Verwenden Sie

Funktion
<code class="language-C#">private float playerScore = 0;
private int nextScene = 0;

private void Start()
{
    StartCoroutine(SceneLoader());
}

private IEnumerator SceneLoader()
{
    Debug.Log("等待玩家分数达到 >= 10");
    yield return new WaitUntil(() => playerScore >= 10);
    Debug.Log("玩家分数 >= 10。加载下一关");
    nextScene++;
    SceneManager.LoadScene(nextScene);
}</code>
Nach dem Login kopieren

Aufruffunktion verzögern. WaitWhile

<.> 7. Verwenden Sie die Funktion

und

<code class="language-C#">private void Start()
{
    StartCoroutine(InputWaiter());
}

private IEnumerator InputWaiter()
{
    Debug.Log("等待按下 Escape 键");
    yield return new WaitWhile(() => !Input.GetKeyDown(KeyCode.Escape));
    Debug.Log("按下 Escape 键。退出应用程序");
    Quit();
}

// ... (Quit 函数) ...</code>
Nach dem Login kopieren

ähnliche Methode 3, verwenden jedoch keine Coroutinen. Dies wird häufig aufrufen, eine geringe Effizienz, die für das langfristige Warten nicht empfohlen wird. Invoke Welche Methode zur Auswahl hängt vom spezifischen Anwendungsszenario ab. Für die einfache Latenz ist oder

ausreichend; Vermeiden Sie es, lange in

zu warten.

Das obige ist der detaillierte Inhalt vonWie kann man einfach ein Skript in Einheit warten/schlafen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage