2016-11-12 265 views
0

一旦我调用此协程,我无法再次停止它,它会一直持续下去。我已经试图用一个字符串等来调用它...C#Unity:无法停止协程

这个块是在更新方法中被调用的方法可能与它有什么关系?

这是我的代码:

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,会发生什么?或者如果'currentAmmo'永远不会超过2而'isColorFading'为''' –

+0

哎呀,这是一个错误..如果我编辑... sry – 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

Thans很多,还没有尝试过,但似乎逻辑... – r0128

+0

对于您的信息,堆栈溢出有一个文档类别与关于包括Unity在内的各种主题的很多例子,请查看! ;)http://stackoverflow.com/documentation/unity3d/topics – Hellium

0

您也可以尝试简单

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

因为StartCoroutine是返回协程类型的对象,它最初的方法。