C#Unity:无法停止协同程序

C#Unity:无法停止协同程序,c#,unity3d,C#,Unity3d,一旦我称之为合作,我无法再阻止它,它将永远继续下去。我已经试着用字符串等来称呼它 此块位于更新方法中调用的方法中,该方法可能与此有关 这是我的代码: if (currentAmmo < 2 && isColorFading == false) { StartCoroutine (ColourPulse (ammoCounter, initialColor, 2)); isColorFading = true; } else if

一旦我称之为合作,我无法再阻止它,它将永远继续下去。我已经试着用字符串等来称呼它

此块位于更新方法中调用的方法中,该方法可能与此有关

这是我的代码:

 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;
    }
if(currentAmmo<2&&isColorFading==false){
启动例行程序(彩色脉冲(弹药计数器,初始颜色,2));
isColorFading=true;
}否则如果(currentAmmo>=2&&isColorFading==true){
StopCorroutine(彩色脉冲(ammoCounter,initialColor,2));
ammoncounter.color=初始颜色;
isColorFading=false;
}

你的问题很简单。简而言之,您必须保留您的协同程序的引用才能停止它:

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;
}
私有IEnumerator例程;
// [...]
if(currentAmmo<2&&isColorFading==false){
myCoroutine=colorpulse(amomcounter,initialColor,2);
启动程序(myCoroutine);
isColorFading=true;
}否则如果(currentAmmo>=2&&isColorFading==true){
stopcroutine(myCoroutine);
ammoncounter.color=初始颜色;
isColorFading=false;
}

你的问题很简单。简而言之,您必须保留您的协同程序的引用才能停止它:

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;
}
私有IEnumerator例程;
// [...]
if(currentAmmo<2&&isColorFading==false){
myCoroutine=colorpulse(amomcounter,initialColor,2);
启动程序(myCoroutine);
isColorFading=true;
}否则如果(currentAmmo>=2&&isColorFading==true){
stopcroutine(myCoroutine);
ammoncounter.color=初始颜色;
isColorFading=false;
}

您也可以尝试使用simple

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

因为startcroutine是一个返回它所启动的Coroutine类型对象的方法。

您也可以尝试simple

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

因为startcroutine是一个返回它所启动的Coroutine类型对象的方法。

如果
currentAmmo
等于2会发生什么?或者如果
currentAmmo
从来都不大于2,而
iscolorReading
true
oops这是一个错误..让我编辑…sryy您必须调试并查看。也许你需要使用
|
而不是
&
我应该在debug中写些什么???在每个if语句中添加
debug.Log
和不同的消息,以查看代码中发生了什么。这就是他的意思。如果
currentAmmo
等于2会怎么样?或者如果
currentAmmo
从来都不大于2,而
iscolorReading
true
oops这是一个错误..让我编辑…sryy您必须调试并查看。也许你需要使用
|
而不是
&
我应该在debug中写些什么???在每个if语句中添加
debug.Log
和不同的消息,以查看代码中发生了什么。这就是他的意思。关于您的信息,Stack Overflow有一个文档类别,其中有许多关于各种主题的示例,包括Unity,请查看!)供您参考,Stack Overflow有一个文档类别,其中有许多关于各种主题的示例,包括Unity,请查看!)