簡體   English   中英

我怎樣才能使“do”循環繼續,但在我的代碼中不是無限循環?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM