如何淡化Unity

时间:2016-03-15 20:45:19

标签: c# unity3d scripting unity5 unity5.3

Heyo,我正在努力让我的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()没有按预期工作的任何想法?

1 个答案:

答案 0 :(得分:0)

抱歉,没有从这里获得电子邮件更新:/。所以我最终做的就是在最基本的层面上编写自己的协程,这似乎有用......出于某种原因。老实说,不知道为什么以前没有用。这可以在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;
        }
    }