2016-11-12 8 views
0

このコルーチンを呼び出すと、もう一度それを停止することができず、永遠に続きます。私はすでに文字列などでそれを呼び出そうとしています...C#ユニティ:コルーチンを停止できません

このブロックは、更新メソッドで呼び出されているメソッドにあります。

これは私のコードです:

if (currentAmmo < 2 && isColorFading == false) { 

     StartCoroutine (ColourPulse (ammoCounter, initialColor, 2)); 
     isColorFading = true; 

    } else if (currentAmmo >= 2 && isColorFading == true) { 

     StopCoroutine (ColourPulse (ammoCounter, initialColor, 2)); 
     ammoCounter.color = initialColor; 
     isColorFading = false; 
    } 
+0

'currentAmmo'が2の場合はどうなりますか?または、 'currentCommand'が' true 'のときに 'currentAmmo'が2より大きい値にならない場合はどうなりますか –

+0

これは間違いです...編集してください... – r0128

+0

デバッグして見てください。たぶんあなたは '&&'の代わりに '||'を使う必要があります –

答えて

2

あなたの問題は簡単です。いくつかの単語では、あなたはそれを止めるためにあなたのコルーチンの参照を保持する必要があります。

private IEnumerator myCoroutine ; 

// [...] 

if (currentAmmo < 2 && isColorFading == false) { 

    myCoroutine = ColourPulse (ammoCounter, initialColor, 2) ; 
    StartCoroutine (myCoroutine) ; 
    isColorFading = true; 

} else if (currentAmmo >= 2 && isColorFading == true) { 

    StopCoroutine (myCoroutine); 
    ammoCounter.color = initialColor; 
    isColorFading = false; 
} 
+0

まだ多く試してみませんでしたが、論理的に見えます... – r0128

+0

Unityをはじめとする様々なテーマについてのたくさんの例があります。 ;)http://stackoverflow.com/documentation/unity3d/topics – Hellium

0

StartCoroutineは、それが開始されたコルーチン型オブジェクトを返すメソッドであるため、あなたはまた、簡単な

Coroutine myCoroutine = StartCoroutine(ColourPulse (ammoCounter, initialColor, 2); 
StopCoroutine(myCorutine); 

を試すことができます。