如何在 Unity 中淡入淡出文本
How to fade text in Unity
嗨,我正在尝试让我的 GUI 在不使用时淡出。具体来说,对于 Minecraft 风格的工具栏,我希望它在玩家使用滚轮时弹出并在他们完成滚动后几秒钟内消失。 GUI 工作正常,但我无法让这个褪色的东西工作。我假设一旦我让选择文本工作,精灵就会很容易跟随,所以我现在只讨论选择文本。 inventoryText 以全白开始游戏。
protected void OnGUI()
{
if (isInvGUIDirty)
{
// Update selection text
controllerInterface.inventoryText.CrossFadeAlpha(255f, 0, false);
controllerInterface.inventoryText.CrossFadeAlpha(0.1f, 2, false);
^ 这导致(当我移动滚轮时)库存文本变为全白色,两秒后变为浅灰色。没有圆滑的过渡,依然清晰可见。每次我移动滚轮时都会重复。
controllerInterface.inventoryText.CrossFadeAlpha(255f, 0, false);
controllerInterface.inventoryText.CrossFadeAlpha(0f, 2, false);
^ 这导致(当我移动滚轮时)库存文本变为全白,两秒后变为不可见。每次我移动滚轮时都会重复。显然 0.1 alpha 使一切变得不同 o_O
controllerInterface.inventoryText.color = Color.white;
controllerInterface.inventoryText.CrossFadeAlpha(0.1f, 2, false);
^ 这会导致物品栏文本慢慢变成浅灰色,但滚轮上没有变化。
关于 CrossFadeAlpha() 为何未按预期工作的任何想法?
抱歉,无法从此处获取电子邮件更新:/。所以我最终所做的工作是在最基本的层面上编写我自己的协程,这似乎工作......出于某种原因。老实说,不确定为什么以前的不起作用。这也适用于 CanvasGroup 而不是单个项目。
private void FadeInventoryGroup(float alpha, float delay)
{
if (fader != null)
StopCoroutine(fader);
fader = StartCoroutine(EFadeOutInventory(alpha, delay));
}
private IEnumerator EFadeOutInventory(float alpha, float delay)
{
yield return new WaitForSeconds(delay);
float progress = 1f - Mathf.Abs(inventoryGroup.alpha - alpha);
float start = inventoryGroup.alpha;
while (progress < 1f)
{
progress += Time.deltaTime;
inventoryGroup.alpha = Mathf.Lerp(start, alpha, progress);
yield return 0;
}
}
嗨,我正在尝试让我的 GUI 在不使用时淡出。具体来说,对于 Minecraft 风格的工具栏,我希望它在玩家使用滚轮时弹出并在他们完成滚动后几秒钟内消失。 GUI 工作正常,但我无法让这个褪色的东西工作。我假设一旦我让选择文本工作,精灵就会很容易跟随,所以我现在只讨论选择文本。 inventoryText 以全白开始游戏。
protected void OnGUI()
{
if (isInvGUIDirty)
{
// Update selection text
controllerInterface.inventoryText.CrossFadeAlpha(255f, 0, false);
controllerInterface.inventoryText.CrossFadeAlpha(0.1f, 2, false);
^ 这导致(当我移动滚轮时)库存文本变为全白色,两秒后变为浅灰色。没有圆滑的过渡,依然清晰可见。每次我移动滚轮时都会重复。
controllerInterface.inventoryText.CrossFadeAlpha(255f, 0, false);
controllerInterface.inventoryText.CrossFadeAlpha(0f, 2, false);
^ 这导致(当我移动滚轮时)库存文本变为全白,两秒后变为不可见。每次我移动滚轮时都会重复。显然 0.1 alpha 使一切变得不同 o_O
controllerInterface.inventoryText.color = Color.white;
controllerInterface.inventoryText.CrossFadeAlpha(0.1f, 2, false);
^ 这会导致物品栏文本慢慢变成浅灰色,但滚轮上没有变化。
关于 CrossFadeAlpha() 为何未按预期工作的任何想法?
抱歉,无法从此处获取电子邮件更新:/。所以我最终所做的工作是在最基本的层面上编写我自己的协程,这似乎工作......出于某种原因。老实说,不确定为什么以前的不起作用。这也适用于 CanvasGroup 而不是单个项目。
private void FadeInventoryGroup(float alpha, float delay)
{
if (fader != null)
StopCoroutine(fader);
fader = StartCoroutine(EFadeOutInventory(alpha, delay));
}
private IEnumerator EFadeOutInventory(float alpha, float delay)
{
yield return new WaitForSeconds(delay);
float progress = 1f - Mathf.Abs(inventoryGroup.alpha - alpha);
float start = inventoryGroup.alpha;
while (progress < 1f)
{
progress += Time.deltaTime;
inventoryGroup.alpha = Mathf.Lerp(start, alpha, progress);
yield return 0;
}
}