コルーチンの内容を更新したいです。
Unityで2Dのローグライクゲームを制作しています。
キャラクターの移動でコルーチンを使っているのですが、コルーチンが終了する前に新たな移動先が決定してしまうためキャラクターの画像の移動が追いつきません。
新たな移動先が決定したときに、現在実行しているコルーチンに加えて、次のコルーチンも呼ばれるようにしたいです。
よろしくお願いいたします。
該当のソースコード
C#
1 IEnumerator MoveCoroutine(Vector3 startPos, Vector3 endPos) //Playerをゆっくり動かす関数 2 { 3 float remainingDistance = (endPos - transform.position).sqrMagnitude; 4 5 isMoving = true; 6 7 while (remainingDistance > float.Epsilon) 8 { 9 transform.position = Vector3.MoveTowards(transform.position, endPos, 1f / moveTime * Time.deltaTime); 10) 11 12 remainingDistance = (endPos - transform.position).sqrMagnitude; 13 14 yield return null; 15 } 16 transform.position = endPos;//ループを抜けた時はきっちり移動させる。 17 18 isMoving = false; 19 }
試したこと
MoveCoroutineを停止して、新たにコルーチンを開始すればいいのではないかと思い、以下のようなスクリプトを実行しましたがうまくいきませんでした。
C#
1 Coroutine moveCoroutine; 2 3 if (isMoving) 4 { 5 StopCoroutine(moveCoroutine); 6 moveCoroutine = null; 7 } 8 9 moveCoroutine = StartCoroutine(MoveCoroutine(startPos, endPos));
「キューイング」という概念を勉強するとよいと思います。
もしくは
> キャラクターの移動でコルーチンを使っているのですが、コルーチンが終了する前に新たな移動先が決定してしまう
がどうして起きるのかわかりませんがそれ自体が問題っぽいので
https://github.com/dsuz/unity-programming-exercise-4th-term-2020/wiki/ex4
のサンプルなどを見てどうやって作るのかを参考にするとよいと思います。
ありがとうございます。早速勉強してみます。
サンプルのリンクもありがとうございます。参考にさせていただ来ます。
あなたの回答
tips
プレビュー