質問: Unityでのコルーチンの考え方について 疑問があるので質問させてください。 私の認識ではコルーチンとは ・処理の途中で秒数指定などでwaitをかけれる ・IEnumerator型を戻り値とし、yield returnを含む関数 なのですが、 実際に秒数指定をしてwaitをかけても処理を遅延できませんでした。 例) ``` void update(){ hoge(); } void hoge(){ //アニメーション処理〜1秒かけて指定座標に移動させる処理を実装予定〜 //DOmove.localPosition(~~~); //アニメーションが終わるまで1秒処理を待機させたい StartCoroutine("hogehoge"); } IEnumerator hogehoge(){ yield return new WaitForSeconds(1); } ``` 上記のような処理を実装しようとした時に アニメーションを待たずしてupdateが走ってしまい、正常にアニメーション処理を実行できないのですが 私の認識が誤っているのでしょうか? 宜しくお願い致します。 実行環境: OS:macOS Sierra 10.12.5 開発環境:Unity 4.6.0 DOTween v1.1.575
回答: 認識が異なっています。 コルーチンは「非同期処理を行う」機能です。 待機するのは「IEnumeratorメソッド内の処理」であり、**ゲーム全体の時間にウェイトをかけるものではありません。** (例えば以下のようにすると、hogehogeの中では正しく1秒待機しているのが分かります) ``` IEnumerator hogehoge(){ Debug.Log("hogehoge start"); yield return new WaitForSeconds(1); Debug.Log("hogehoge end"); } ``` なのでUpdateを使用する際は、Time.deltaTime等を用いたタイマー処理するとよいです。 [Unity] 一定の時間間隔で処理を実行する方法まとめ(時間制御)-Qiita (ちなみにUpdateの中でStartCoroutineすると、1フレーム毎にコルーチンが呼ばれて大変なことになるので使うべきではないです)