Rumah >pembangunan bahagian belakang >C++ >Bagaimana cara membuat skrip menunggu/tidur dalam perpaduan?

Bagaimana cara membuat skrip menunggu/tidur dalam perpaduan?

DDD
DDDasal
2025-01-31 13:11:09940semak imbas

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

skrip perpaduan menunggu/penggantungan beberapa kaedah

Perpaduan menyediakan pelbagai kaedah untuk menunggu atau menjeda skrip.

<.> 1. Gunakan pembetulan dan

Ini adalah kaedah yang paling mudah dan langsung. Letakkan kod yang anda perlukan untuk menunggu dalam fungsi Coroutine, dan gunakan masa menunggu WaitForSeconds yang ditentukan. Ingat, fungsi coroutine perlu dimulakan dengan .

WaitForSeconds <.> 2. Gunakan pembetulan dan 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>
Perbezaan antara

dan adalah bahawa ia menggunakan masa yang tidak sesuai untuk menunggu. WaitForSecondsRealtime

<.> 3. Gunakan coroutine dan

tunjukkan masa menunggu WaitForSecondsRealtime WaitForSeconds Time.timeScale Kaedah ini sesuai untuk adegan yang perlu memaparkan masa menunggu, seperti pemasa. Ia juga membolehkan operasi mengganggu semasa proses menunggu. 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>
versi mudah, memisahkan pemasa ke dalam coroutine bebas:

Time.deltaTime <.> 4. Gunakan pembetulan dan fungsi

menunggu keadaan tertentu untuk bertemu. Sebagai contoh, tunggu skor pemain mencapai 100 mata sebelum memuatkan tahap seterusnya.
<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>

<.> 5. Gunakan pembetulan dan
<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>
fungsi

WaitUntil Menunggu keadaan tertentu tidak dipenuhi. Sebagai contoh, tunggu pemain untuk menekan kekunci ESC dan keluar dari permainan.

<.> 6. Gunakan

fungsi
<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>

fungsi panggilan kelewatan. WaitWhile

<.> 7. Gunakan

fungsi dan

<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>

Kaedah serupa 3, tetapi jangan gunakan coroutine. Ini akan sering memanggil, kecekapan yang rendah, tidak disyorkan untuk menunggu lama. Invoke Kaedah yang harus dipilih bergantung pada senario aplikasi tertentu. Untuk latency mudah, atau

adalah mencukupi; Elakkan menunggu lama dalam

.

Atas ialah kandungan terperinci Bagaimana cara membuat skrip menunggu/tidur dalam perpaduan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn