[英]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.