2017-01-18 6 views
0

一時停止を作成する私は、この試してみてください。どの待ち/ディレイ/

void RUN() 
{ 
    Debug.Log("Before Corutine"); 
    StartCoroutine(Test()); 
    Debug.Log("After Corutine"); 
} 


IEnumerator Test() 
{ 
    Debug.Log("Before Wait"); 
    yield return new WaitForSeconds(5); 
    Debug.Log("After Wait"); 
} 

をそして私が手:

Corutine
前に(5秒後)Corutine

を待っ前

待ってから

私の夢取得です:

Corutine
前Corutine
後に待機


(5秒待つ)
を待っ前にすることは、可能ですか?

+0

可能な複製:http://stackoverflow.com/questions/30267537/unity-need-to-return-value-only-after-coroutine-finishes – jdmdevdotnet

+1

@AlGoreRhythmこれらは関連していません。 OPは値を返すことを望まない。これは他の多くの質問と重複していますが。もう見つけられません。 – Programmer

+0

さて、はい、彼はデータを返す必要はありません。しかし、その答えは、OPが必要とする同期コルーチンをどうやって行うのかを明確に説明しています。答えはまだ同じです(答えservyの提供、同じことを参照してください)。 – jdmdevdotnet

答えて

3

コルーチンをRUNにする必要があります(それに応じてすべての呼び出しを調整します)。yieldの結果はStartCoroutineになります。

EDIT:あなたはRUN()を呼び出すどこ、あなたが今StartCoroutine(RUN());

IEnumerator RUN() 
{ 
    Debug.Log("Before Corutine"); 
    yield return StartCoroutine(Test()); 
    Debug.Log("After Corutine"); 
} 


IEnumerator Test() 
{ 
    Debug.Log("Before Wait"); 
    yield return new WaitForSeconds(5); 
    Debug.Log("After Wait"); 
} 

を呼び出す必要があります。

+0

ありがとうございました。しかし、私はプロトタイプだけを示しました。 実際のテストでは、いくつかの変数を取得し、変数を返します。それは再帰プロシージャです:( これは、なぜ私はコルーチンとしてRUN()を作成したくないのですか?( RUN ()を使用してTest()を使用すると速くなります.Test()内で少し遅延を作りたいのですが。 – user3246203

+0

@ user3246203それは答えを変えるものではありません。 – Servy

+1

@ user3246203 RUNをIEnumeratorにしたくない場合は、おそらくスレッドを開くことができますか?しばらくの間Unityを使用していないのですが、新しい非同期スレッドをスピンオフしてメソッド自体をIEnumeratorにすることはできないことを確かめてください。 – jdmdevdotnet