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

Bagaimana cara membuat skrip menunggu/tidur dalam perpaduan?

DDD
Lepaskan: 2025-01-31 13:11:09
asal
915 orang telah melayarinya

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)

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);
}
Salin selepas log masuk
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

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);
}
Salin selepas log masuk
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.
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;
    }
    // ... 剩余代码 ...
}
Salin selepas log masuk

<.> 5. Gunakan pembetulan dan
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;
    }
}
Salin selepas log masuk
fungsi

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

<.> 6. Gunakan

fungsi
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);
}
Salin selepas log masuk

fungsi panggilan kelewatan. WaitWhile

<.> 7. Gunakan

fungsi dan

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

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

// ... (Quit 函数) ...
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan