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() 没有按预期工作的任何想法?

4

1 回答 1

-1

抱歉,没有从这里收到电子邮件更新:/。所以我最终做的就是在最基本的层面上编写我自己的协程,这似乎工作......出于某种原因。老实说,不知道为什么以前的不起作用。这也适用于 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;
        }
    }
于 2016-03-21T18:37:04.423 回答