C# 停止带有切换按钮的协程
c#unity3d
C# stop co-routine using toggle button, c#, unity3d, C#, Unity3d,我有一个 co 例程,当切换按钮的 bool 改变时触发,当 bool 再次改变时,co 例程应该停止,另一个应该开始。 这是我的代码: public class thermoPowerControlPanel : MonoBehaviour {private ThermoElectric thermo;public bool toggleBool1;public int temperature;private int tempUp = 10;pri
我有一个 co 例程unity 暂停继续按钮代码,当切换按钮的 bool 发生变化时触发,当 bool 再次变化时,co 例程应该停止,另一个应该开始。 这是我的代码:
public class thermoPowerControlPanel : MonoBehaviour {
private ThermoElectric thermo;
public bool toggleBool1;
public int temperature;
private int tempUp = 10;
private int tempDown = 1;
public thermoPowerControlPanel (){
temperature = 100;
}
public void turbine1State (bool toggleBool1) {
if (toggleBool1 == false) {
Debug.Log (toggleBool1);
Invoke("ReduceTemperatureEverySecond", 1f);
}
if (toggleBool1 == true) {
Debug.Log (toggleBool1);
Invoke("IncreaseTemperatureEverySecond", 1f);
}
}
private void ReduceTemperatureEverySecond()
{
if (toggleBool1 == true)
{
Debug.Log("I was told to stop reducing the temperature.");
return;
}
temperature = temperature - tempDown;
Debug.Log (temperature);
Invoke("ReduceTemperatureEverySecond", 1f);
}
private void IncreaseTemperatureEverySecond()
{
if (toggleBool1 == false)
{
Debug.Log("I was told to stop increasing the temperature.");
return;
}
temperature = temperature + tempUp;
Debug.Log (temperature);
Invoke("ReduceTemperatureEverySecond", 1f);
}
}
当函数 turbine1State(bool t1) 接收到第一个 bool(false) 时程序开发,例程 DecreateTemperatureEverySecond() 启动,但随后立即停止,并发送 Debug.Log 消息,它应该继续降低温度直到 bool(由切换按钮)变为真。
你能帮我吗
您只能通过名称停止协程
试试类似的东西
start例程(“增加温度”)代码>然后StopCoroutine(“升高温度”)代码>
有许多方法可以调用startcroutine
.如果你用“string”方法启动一个协程,你可以像下面这样“停止”协程 如果你这样启动它
start routine(functionnameasstringher()) 你不能按名称停止它
(您也可以访问实际的枚举器来停止协程,但这远远超出了初学者使用协程的范围。)
您只能通过名称停止协程
试试类似的东西
start例程(“增加温度”)代码>然后StopCoroutine(“升高温度”)代码>
有许多方法可以调用startcroutine
.如果你用“string”方法启动一个协程,你可以像下面这样“停止”协程 如果你这样启动它
start例程(functionnameasstringher())代码>您不能按名称停止它
(您也可以访问实际的枚举器来停止协同路由,但这远远超出了初学者使用协同路由的范围。)这很简单!
在启动中
InvokeRepeating( "Temp", 1f, 1f );
. . 。然后
private void Temp()
{
if (tog.isOn)
temperature = temperature + 1;
else
temperature = temperature - 1;
// also, ensure it is never outside of 0-100
temperature = Mathf.Clamp(temperature, 0,100);
}
如果您需要“完全停止”运动(上下),请这样做
CancelInvoke("Temp");
太简单
注意:仅供参考,我解释的另一种模式是:
bool some flag;
Invoke("Temp", 1f);
private void Temp()
{
if (some flag is tripped) stop doing this
.. do something ..
Invoke( ..myself again after a second .. )
}
在现实生活中,“不断调用自己”通常比使用 InvokeRepeating 更好
在这个简单的示例中,只需使用 InvokeRepeating,然后使用 CancelInvoke。
这很简单!存在
启动中
InvokeRepeating( "Temp", 1f, 1f );
. . 。然后
private void Temp()
{
if (tog.isOn)
temperature = temperature + 1;
else
temperature = temperature - 1;
// also, ensure it is never outside of 0-100
temperature = Mathf.Clamp(temperature, 0,100);
}
如果您需要“完全停止”运动(上下),请这样做
CancelInvoke("Temp");
太简单
注意:仅供参考,我解释的另一种模式是:
bool some flag;
Invoke("Temp", 1f);
private void Temp()
{
if (some flag is tripped) stop doing this
.. do something ..
Invoke( ..myself again after a second .. )
}
在现实生活中,“不断调用自己”通常比使用 InvokeRepeating 更好
在这个简单的示例中,只需使用 InvokeRepeating,然后使用 CancelInvoke。
搜索关于“停止协同路由”的 1000 个问题。 我认为问题出在 bool if 条件上,我有代码来阻止它,但它永远不会被激活。 按照 Joe Blow 的建议,我更改了代码以停止使用协程。 由于某些未知原因,调用 ReduceTemperatureEverysecond() 时 toggleBool1 似乎变为 true。 嗨@growanimation。 . 你能简单解释一下,你想要实现什么游戏图片,然后你可以轻松地在 1000 个问题上编写代码搜索“停止协程”我认为问题出在 bool if 条件上,我有代码来阻止它,但它从来没有活性。 按照 Joe Blow 的建议,我更改了代码以停止使用协程。 由于某些未知原因,调用 ReduceTemperatureEverysecond() 时 toggleBool1 似乎变为 true。 嗨@growanimation。 . 能不能简单说一下,你要达到什么目的,这样写代码就容易多了。 我刚刚做了这个,但它仍然不起作用,我有同样的问题。 我将使用新代码编辑问题。 这个答案是不正确的。您也可以通过引用
Coroutine
对象或当前返回的
IEnumerator
停止协同路由。检查重载方法
monobhavior.stopCorroutine
. 据我了解,较新的启动/停止协程调用您的代码 - 它有效,天哪,您可能对这个微妙的问题感兴趣@JerrySwitalski! 我刚刚做了,但仍然没有用,我有同样的问题。 我将使用新代码编辑问题。 这个答案是不正确的。您也可以通过引用
Coroutine
对象或当前返回的
IEnumerator
停止协同路由。检查重载方法
monobhavior.stopCorroutine
. 据我了解,较新的启动/停止协程调用您的代码 - 它有效unity 暂停继续按钮代码,天哪,您可能对这个微妙的问题感兴趣@JerrySwitalski! 但是我不需要再次调用函数本身,因为现在我正确地使用了 InvokeRepeating? 是的,这是十亿分之一的正确率。 我只是出于好奇才提到“其他方法”。 但是我不需要再次调用函数本身,因为现在我正在使用 InvokeRepeating 对吗? 是的,这是十亿分之一的正确率。 我只是出于好奇才提到“其他方法”。