在游戏对象设置活动 couritine 之前的延迟

时间:2021-02-19 15:09:00

标签: c# unity3d

我尝试在按下按钮时在游戏对象(两个面板)被激活之前延迟 3 秒。我在单击 panelview() 时分配了按钮,但我找不到如何将 couritine 写在里面作为 IEnumerator。

有人可以帮我吗?谢谢

这里是我想将 couritine 合并成的代码部分:

 public void panelview()
{
   

    if (totalenergy == 0)
    {
         panel2.gameObject.SetActive(true);

    }
    if (totalenergy >= 1)
    {

    panel.gameObject.SetActive(true);

    }
}

2 个答案:

答案 0 :(得分:1)

在这种情况下,您也可以在没有任何协程的情况下使用 Invoke

public void PanelView()
{
    Invoke(nameof(ShowPanel), DELAY);
}

private void ShowPanel()
{   
    if (totalenergy == 0)
    {
         panel2.gameObject.SetActive(true);
    }
    else if (totalenergy >= 1)
    {
        panel.gameObject.SetActive(true);
    }
}

或作为 Coroutine

public void PanelView()
{
    StartCoroutine (ShowPanelAfterDelay(DELAY));
}

private IEnumerator ShowPanelAfterDelay(float delay)
{ 
    yield return new WaitForSeconds (delay);

    if (totalenergy == 0)
    {
         panel2.gameObject.SetActive(true);
    }
    else if (totalenergy >= 1)
    {
        panel.gameObject.SetActive(true);
    }
}

其中 DELAY 是所需的延迟(以秒为单位)。


从 UX 的角度来看,虽然我认为在单击按钮后向用户提供反馈的三秒钟时间很长;)

答案 1 :(得分:0)

这应该可以解决问题(希望它可以编译 - 我没有检查它)。

 public void OnButtonClick() {
    
    StartCoroutine(Delay());
    
    }



 public IEnumerator Delay()
            {
                yield return new WaitForSeconds(3);
                
                // PanelView(); 
                // or
                // code that you want to execute it after 3 seconds
            }