基本上,每當我走進觸發器時,它都會無限重復回圈。我知道原因,但我不知道如何修復它以使其正常作業。它的意思是這樣做,直到你離開觸發器。
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 中交換了兩行并解決了問題,感謝您的幫助!:)
uj5u.com熱心網友回復:
每次呼叫時,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也應該停止它。這是您的實際代碼嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/424501.html
