我尝试在按下按钮时在游戏对象(两个面板)被激活之前延迟 3 秒。我在单击 panelview() 时分配了按钮,但我找不到如何将 couritine 写在里面作为 IEnumerator。
有人可以帮我吗?谢谢
这里是我想将 couritine 合并成的代码部分:
public void panelview()
{
if (totalenergy == 0)
{
panel2.gameObject.SetActive(true);
}
if (totalenergy >= 1)
{
panel.gameObject.SetActive(true);
}
}
答案 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
}