[英]How can I make the "do" loop continue, but not infinitely in my code?
基本上,每当我走进触发器时,它都会无限重复循环。 我知道这是为什么,但我不知道修复它以使其正常工作的方法。 它意味着这样做,直到你离开触发器。
public void OnTriggerEnter(Collider other)
{
InDamageRange = true;
StartCoroutine(waiter());
}
public void OnTriggerExit(Collider other)
{
StopCoroutine(waiter());
InDamageRange = false;
}
public IEnumerator waiter()
{
do
{
yield return new WaitForSeconds(1.5f);
player.Health = player.Health - damage;
} while (InDamageRange != false);
}
我该怎么做才能完成这项工作?
编辑:原来问题是我试图在将 bool 设置为 false 之前停止协程。 我交换了 OnTriggerExit 中的两行并解决了问题,感谢您的帮助::)
每次调用waiter()
时,您都在创建IEnumerator
的新实例。 如果你想停止它,你确实需要保留对原始文件的引用。 尝试这个:
private IEnumerator _waiter;
public void OnTriggerEnter(Collider other)
{
InDamageRange = true;
_waiter = waiter();
StartCoroutine(_waiter);
}
public void OnTriggerExit(Collider other)
{
StopCoroutine(_waiter);
InDamageRange = false;
}
public IEnumerator waiter()
{
do
{
yield return new WaitForSeconds(1.5f);
player.Health = player.Health - damage;
} while (InDamageRange != false);
}
但鉴于您的代码设置InDamageRange = true
也应该停止它。 这是你的实际代码吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.