如何在 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;
        }
    }