web-dev-qa-db-ja.com

スクリプトを単一の方法で簡単に待機/スリープ状態にする方法

どうすればTextUI.text = ....スリープ機能。各フレーズの間に3秒待機しますか?

public Text GuessUI;
public Text TextUI;

[...truncated...]

TextUI.text = "Welcome to Number Wizard!";
TextUI.text = ("The highest number you can pick is " + max);
TextUI.text = ("The lowest number you can pick is " + min);

私はすでにさまざまなことを試しましたが、うまくいきませんでした。

TextUI.text = "Welcome to Number Wizard!";
yield WaitForSeconds (3);
TextUI.text = ("The highest number you can pick is " + max);
yield WaitForSeconds (3);
TextUI.text = ("The lowest number you can pick is " + min);

Bashでは:

echo "Welcome to Number Wizard!"
sleep 3
echo "The highest number you can pick is 1000"
sleep 3
.....

しかし、私はUnityでC#を使用してこれをどのように行うのかわかりません

20
DiogoSaraiva

WaitForSecondsを使用するのは正しいことです。しかし、コルーチンなしで使用してみたのではないかと思います。それはそれがどのように機能するかです:

public void SomeMethod()
{
    StartCoroutine(SomeCoroutine());
}

private IEnumerator SomeCoroutine()
{
    TextUI.text = "Welcome to Number Wizard!";
    yield return new WaitForSeconds (3);
    TextUI.text = ("The highest number you can pick is " + max);
    yield return new WaitForSeconds (3);
    TextUI.text = ("The lowest number you can pick is " + min);
}
6
Max Yankov

.Net 4.xでは、タスクベースの非同期パターン(TAP)を使用してこれを実現できます。

// .NET 4.x async-await
using UnityEngine;
using System.Threading.Tasks;
public class AsyncAwaitExample : MonoBehaviour
{
     private async void Start()
     {
        Debug.Log("Wait.");
        await WaitOneSecondAsync();
        DoMoreStuff(); // Will not execute until WaitOneSecond has completed
     }
    private async Task WaitOneSecondAsync()
    {
        await Task.Delay(TimeSpan.FromSeconds(1));
        Debug.Log("Finished waiting.");
    }
}

これは、Unityで.Net 4.xを使用するための機能です。 説明についてはこのリンク を参照してください。

サンプルプロジェクトのこのリンクとコルーチンとの比較

しかし、ドキュメントに記載されているように注意してくださいこれはコルーチンによる完全な置き換えではありません

1
etzl