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);
}
}
你的代码应该是:
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());