我正在使用TextMeshPro设置一个“场景简介”,上面写着“ Level 1”字样。我已经在画布中创建了text元素,并且试图找到一种使其淡入,等待,然后淡出的方式(有点像在Skyrim中发现新地方时所看到的样子)。
到目前为止,我尝试了一种通用的解决方案,以便可以将同一脚本用于其他用途(例如,不在场景开始时,不仅淡入淡出等等)。
使用TMPro:
...
using TMPro;
...
开始和声明:
public class IntroFade : MonoBehaviour
{
[SerializeField] private TextMeshProUGUI textToUse;
[SerializeField] private bool fadeIn = false;
[SerializeField] private bool fadeOnStart = false;
[SerializeField] private float timeMultiplier;
private bool FadeIncomplete = false;
private void Start()
{
if (fadeOnStart)
{
if (fadeIn)
{
StartCoroutine(FadeInText(timeMultiplier, textToUse));
FadeIncomplete = true;
}
else
{
StartCoroutine(FadeOutText(timeMultiplier, textToUse));
}
}
}
...
完成淡入后要在其中淡出的更新
private void Update()
{
if (FadeIncomplete)
{
StartCoroutine(FadeOutText(timeMultiplier, textToUse));
}
}
实际褪色的颜色:
private IEnumerator FadeInText(float timeSpeed, TextMeshProUGUI text)
{
text.color = new Color(text.color.r, text.color.g, text.color.b, 0);
while (text.color.a < 1.0f)
{
text.color = new Color(text.color.r, text.color.g, text.color.b, text.color.a + (Time.deltaTime * timeSpeed));
yield return null;
}
}
private IEnumerator FadeOutText(float timeSpeed, TextMeshProUGUI text)
{
text.color = new Color(text.color.r, text.color.g, text.color.b, 1);
while (text.color.a > 0.0f)
{
text.color = new Color(text.color.r, text.color.g, text.color.b, text.color.a - (Time.deltaTime * timeSpeed));
yield return null;
}
}
public void FadeInText(float timeSpeed = -1.0f)
{
if (timeSpeed <= 0.0f)
{
timeSpeed = timeMultiplier;
}
StartCoroutine(FadeInText(timeSpeed, textToUse));
}
public void FadeOutText(float timeSpeed = -1.0f)
{
if (timeSpeed <= 0.0f)
{
timeSpeed = timeMultiplier;
}
StartCoroutine(FadeOutText(timeSpeed, textToUse));
}
所以发生什么是淡入淡出还是淡出淡出取决于首先启动的协程。我无法使它淡入,在屏幕上停留约2秒钟,然后淡出。
我还尝试了淡入淡出,然后创建一个协程等待几秒钟,然后调用淡出协程,但这也不起作用。
答案 0 :(得分:1)
一个协程可以等待另一个协程的完成,以这种方式考虑将极大地简化问题。您已经创建了淡入和淡出功能,现在只需按顺序运行它们,它们之间需要等待2秒钟。
private IEnumerator IntroFade (TextMeshProUGUI textToUse) {
yield return StartCoroutine(FadeInText(1f, textToUse));
yield return new WaitForSeconds(2f);
yield return StartCoroutine(FadeOutText(1f, textToUse));
//End of transition, do some extra stuff!!
}
如果您有兴趣,these articles对于了解更多有关协程的知识非常有见识。