unity游戏引擎- c#中if中的延迟

本文关键字:if 延迟 游戏 引擎 unity | 更新日期: 2023-09-27 18:02:23

如何在淡出后创建延迟,使文本在屏幕上停留几秒钟?我使用了IEnumerator和协程,但它什么也没做。我还试着把它放在第一个else之后。

现在发生的是文本在有机会淡入之前淡出。文字暂时以半清晰的形式出现,然后消失。这是Unity项目。

同样,Thread.Sleep也不行。

下面是有问题的代码:

IEnumerator Pause ()
{
    yield return new WaitForSecondsRealtime(5);
}
void OnTriggerStay2D(Collider2D interCollider)
{
    if (Input.GetKeyDown(KeyCode.E))
    {
        displayInfo = true;
    }
    else
    {
        displayInfo = false;
    }
}
void FadeText()
{
    if (displayInfo == true)
    {
        text1.text = string1;
        text1.color = Color.Lerp(text1.color, Color.white, fadeTime * Time.deltaTime);
    }
    else
    {
        StartCoroutine(Pause());
        text1.color = Color.Lerp(text1.color, Color.clear, fadeTime * Time.deltaTime);
    }
}

unity游戏引擎- c#中if中的延迟

你的代码应该是:

void Update()
{
    if (fadingOut)
    {
        // fade out with lerp here
    }
}
IEnumerator Pause()
{
    yield return new WaitForSecondsRealtime(5);
    fadingOut = true;
}
void FadeText()
{
    if (displayInfo == true)
    {
        text1.text = string1;
        text1.color = Color.Lerp(text1.color, Color.white, fadeTime * Time.deltaTime);
    }
    else
    {
        StartCoroutine(Pause());
    }
}

你使用协程的想法是对的,但是执行得不太对。当你在协程中调用一个方法时,它将与主线程并行执行。在您的代码中,Pause()方法与Color.Lerp一起运行。如果您想让淡出等待暂停完成之后,它们必须在同一个协程中。

编辑:

如前所述,如果在每一帧上调用FadeText(),这将不起作用。但这向您展示了如何轻松地设置标志,并等待暂停时间完成后再淡出。

您只需要将文本淡出添加到协程中。

IEnumerator Pause()
{
    yield return new WaitForSecondsRealtime(5);
    text1.color = Color.Lerp(text1.color, Color.clear, fadeTime * Time.deltaTime);
}

然后在else语句中启动协程。这样,它将执行等待数秒,然后在您调用它时淡出。

最简单的方法是使用渐变资源。它是免费的,并且有很多其他有用的功能,我在每个项目中使用。

这是一个非常棒的lib.

LeanTween.DelayedCall(1f,()=>{ /*any code that will be called after 1 second will pass*/ });

LeanTween.DelayedCall(1f, SomeMethodWithoutParams());