Maison > développement back-end > C++ > Comment faire simplement attendre / dormir un script dans l'unité?

Comment faire simplement attendre / dormir un script dans l'unité?

DDD
Libérer: 2025-01-31 13:11:09
original
915 Les gens l'ont consulté

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

Unity Script Waiting / Suspension de plusieurs méthodes

Unity fournit une variété de méthodes pour attendre ou faire une pause de scripts.

<.> 1. Utilisez la correction et

Il s'agit de la méthode la plus simple et directe. Mettez le code que vous devez attendre dans la fonction Coroutine et utilisez le temps d'attente WaitForSeconds spécifié. N'oubliez pas que la fonction Coroutine doit être démarrée avec .

WaitForSeconds <.> 2. Utilisez la correction et 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);
}
Copier après la connexion
La différence entre

<<> et est qu'il utilise un temps imparfait pour attendre. WaitForSecondsRealtime

<.> 3. Utilisez la coroutine et

Afficher le temps d'attente WaitForSecondsRealtime WaitForSeconds Time.timeScale Cette méthode convient aux scènes qui doivent afficher le temps d'attente, comme la minuterie. Il permet également les opérations d'interruption pendant le processus d'attente. 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);
}
Copier après la connexion
Version simple, séparez la minuterie en une coroutine indépendante:

Time.deltaTime <.> 4. Utilisez la correction et fonction

en attendant que des conditions spécifiques se remplissent. Par exemple, attendez que le score du joueur atteigne 100 points avant de charger le niveau suivant.
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;
    }
    // ... 剩余代码 ...
}
Copier après la connexion

<.> 5. Utilisez la correction et
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;
    }
}
Copier après la connexion
fonction

WaitUntil attendre des conditions spécifiques n'est pas rempli. Par exemple, attendez que le joueur appuie sur la touche ESC et quitte le jeu.

<.> 6. Utiliser

fonction
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);
}
Copier après la connexion

Retarder la fonction d'appel. WaitWhile

<.> 7. Utilisez la fonction

et

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

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

// ... (Quit 函数) ...
Copier après la connexion

Méthode similaire 3, mais n'utilisez pas de coroutines. Cela appellera fréquemment une faible efficacité, non recommandée pour une attente à long terme. Invoke La méthode à choisir dépend du scénario d'application spécifique. Pour une latence simple, ou

est suffisant; Évitez d'attendre longtemps dans

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal