繁体   English   中英

如何在Unity中淡化文本

[英]How to fade text in Unity

Heyo,我正在尝试使不使用的GUI淡化。 具体来说,对于Minecraft风格的工具栏,我希望它在玩家使用滚轮时弹出并在滚动完成后几秒钟内消失。 GUI工作正常,但是我无法使这种褪色的东西正常工作。 我假设一旦使选择文本生效,这些精灵就会很容易跟随,所以现在我只讨论选择文本。 该清单文本以全白开始游戏。

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;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM