私はカーソルをアニメーション化するために使用しているコルーチンを持っています。コルーチンはこの開始、停止、再開後にコルーチンが2回実行されています
private IEnumerator AnimateCursor(Vector2 targetScreenPoint)
{
while (true)
{
// Do animation stuff
Debug.Log(targetScreenPoint.ToString());
yield return null;
}
}
のように見えるすべては罰金、私はコルーチンを最初に起動したときに動作します。カーソルが動いたら、StopCoroutine("AnimateCursor")
を呼び出してコルーチンを停止し、targetScreenPoint
パラメータの新しい値でコルーチンを再開します。
私はコルーチンをもう一度起動すると、アニメーションカーソルが元の位置に描画され、Debug.Log
はtargetScreenPoint
という最初の値と第2の値の両方を表示します(なぜなら、コルーチンが各更新ループで2回実行されているからです)。
StopCoroutine("AnimateCursor")
をStopAllCoroutines()
に置き換えた場合、正しく動作し、コルーチンが2回目に起動すると、2番目の値はtargetScreenPoint
になります。
何が起こっているのか知っていますか?
EDIT:デバッガの実行中にカーソルがまだアニメーション表示されていたのは間違っていました。私は問題が私のStopCoroutine
であると思うが、私は理由を知らない。コルーチンがパラメータを取る場合、私はコルーチンを停止しなければならないという特別な方法はありますか?
は、あなたが 'StartCoroutine( "AnimateCursor")のコードを投稿してくださいでした;'。私はあなたが間違ってそれを開始するかもしれないと思っています。あなたがそれをループまたは 'Update()'に入れて、あなたが気づいていないことをしたとしましょう。 –
'StartCoroutine'は2度しか呼び出されないと確信しています。私はデバッガを踏んで、その行に2回だけヒットします。私は 'StopCoroutine'を呼び出した後にアニメーションが停止するのが間違っていたので、元の質問を編集しました。 –
あなたは 'StartCoroutine(" AnimateCursor "、targetScreenPoint);'(文字列の分散)を使用しますか? 'StopCoroutine(" AnimateCursor ")'は、その文字列の分散を使用する場合にのみ機能します。あなたが 'StartCoroutine(AnimateCursor(targetScreenPoint));'を使うと、それはできません。 –