Как выцветать текст в Unity

Привет, я пытаюсь заставить мой GUI исчезать, когда он не используется. В частности, для панели инструментов в стиле Minecraft я хочу, чтобы она появлялась, когда игрок использовал колесо прокрутки, и исчезала через несколько секунд после завершения прокрутки. Графический интерфейс работает отлично, но я не могу заставить эту затухающую вещь работать. Я полагаю, что после того, как текст выбора заработает, спрайты будут следовать легко, поэтому сейчас я просто расскажу о тексте выбора. Инвентаризационный текст запускает игру в полном белом цвете.

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 альфа имеет все значение о_О

controllerInterface.inventoryText.color = Color.white;
controllerInterface.inventoryText.CrossFadeAlpha(0.1f, 2, false);

^ Это приводит к тому, что текст инвентаря медленно исчезает до светло-серого, но не изменяется на колесе прокрутки.

Любые идеи о том, почему CrossFadeAlpha() не работает, как ожидалось?

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;
        }
    }
Другие вопросы по тегам