簡體   English   中英

無法停止協程

[英]Can't Stop Coroutine

伙計們,當我給它一些標有披薩的東西時,第一個協程不會停止我該如何阻止它?

請幫幫我,我找不到路。 我應該怎么辦? 順便說一句,我很抱歉發帖不當:/

我正在嘗試制作披薩餐廳游戲。 所以顧客會坐下來,然后 waitforpizza 協程將開始,如果我們給出帶有 pizza 的標簽,waitforpizza 協程應該開始,然后 eatpizza 將開始,但我的 waitforpizza 不會停止。

IEnumerator EAT, PAY, WAIT;

private void Start()
{
    EAT = EatPizza();
    WAIT = WaitForPizza();
    PAY = WaitForTheCase();
}

private void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("Pizza"))
    {
        canEat = true;
    }

    if (other.gameObject.CompareTag("Out"))
    {
        Destroy(this.gameObject);
    }
}

void Update()
{
    if (isEating)
    {
        if (Vector3.Distance(transform.position, agent.destination) <= 1f)
        {
            anim.SetTrigger("sit");
            isEating = false;
        }
    }

    if (!isEating && !isPaying && !isOut && !canEat)
    {
        StartCoroutine(WaitForPizza());
    }

    if (!isEating && !isPaying && !isOut && canEat)
    {
        StopCoroutine(WAIT);
        StartCoroutine(EatPizza());
    }

    if (isPaying)
    {
        isEating = false;
        anim.SetTrigger("walk");
        
        agent.destination = checkoutTarget.position;
        if (Vector3.Distance(transform.position, agent.destination) <= 1f)
        {
            anim.SetTrigger("wait");
            if (ifCashier)
            {
                //throw money 
                isPaying = false;

                isOut = true;
            }

            if (!ifCashier)
            {
                StartCoroutine(WaitForTheCase());
            }
        }
    }

    if (isOut)
    {
        anim.SetTrigger("walk");
        isEating = false;
        isPaying = false;
        
        agent.destination = outTarget.position;
    }

    if (canEat)
    {
        StopCoroutine(WAIT);
    }
}

IEnumerator WaitForTheCase()
{
    anim.SetTrigger("wait");
    yield return new WaitForSeconds(randomFloatWait);
    angry.SetActive(true);
    
    isEating = false;
    isPaying = false;
    isOut = true;
}

IEnumerator EatPizza()
{
    angry.SetActive(false);
    StopCoroutine(WaitForPizza());
    happy.SetActive(true);
    yield return new WaitForSeconds(randomFloatWait);
    
    happy.SetActive(false);
    isEating = false;
    isPaying = true;
    isOut = false;
}

IEnumerator WaitForPizza()
{
    while (!canEat)
    {
        yield return new WaitForSeconds(randomFloatWait);
        angry.SetActive(true);
    
        isEating = false;
        isPaying = false;
        isOut = true;
    }
}

首先,將WAIT定義為Coroutine然后當你想開始等待時使用WAIT = StartCoroutine(WaitForPizza()); 當你想完成它時使用StopCoroutine(WAIT); .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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