Воскресенье, 06 Октября 2024, 14:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Смена цвета Image
labinzevvДата: Суббота, 15 Мая 2021, 14:46 | Сообщение # 1
частый гость
Сейчас нет на сайте
Всем привет.
Есть код, для плавной смены цвета Image
Код

using UnityEngine;
using UnityEngine.UI;

public class changeColorGeometryMainMenu : MonoBehaviour
{
    Image deadLineRenderer;
    [SerializeField] [Range(0f, 1f)] float lerpTime;
    [SerializeField] Color[] newDeadLineColor;
    int colorIndex = 0;
    float t = 0f;
    int len;

    private void Start()
    {
        deadLineRenderer = GetComponent<Image>();
        len = newDeadLineColor.Length;
    }

    private void Update()
    {
        deadLineRenderer.color = Color.Lerp(deadLineRenderer.color, newDeadLineColor[colorIndex], lerpTime * 2 * Time.deltaTime);

        t = Mathf.Lerp(t, 1f, lerpTime * 2 * Time.deltaTime);
        if (t > 0.9f)
        {
            t = 0f;
            colorIndex++;
            colorIndex = (colorIndex >= len) ? 0 : colorIndex;
        }
    }
}

Всё вроде бы работает, цвета меняются, но почему-то с течением времени, уменьшается альфаканал и Image становится прозрачным. Подскажите, как зафиксировать альфаканал, чтобы он всегда оставался 255. Заранее спасибо)


3d modeling, unfolding, and texturing. My works: https://vk.com/labinzevv

Сообщение отредактировал labinzevv - Суббота, 15 Мая 2021, 14:50
drcrackДата: Суббота, 15 Мая 2021, 15:44 | Сообщение # 2
старожил
Сейчас нет на сайте
Насчет цвета
Код
var color = Color.Lerp(deadLineRenderer.color, newDeadLineColor[colorIndex], lerpTime * 2 * Time.deltaTime);
color.a = 1;
deadLineRenderer.color = color;

Либо просто в инспекторе цветам в newDeadLineColor поставить альфу на максимум

Но у тебя проблемы серьезней чем цвет — deltaTime внутри Lerp говорит о том что ты вообще не особо понимаешь как этот Lerp работает, а * 2 и t > 0.9 как костыли на торте как бы рассказывает твою историю борьбы с этим кодом (должен был срабатывать на 1, но получалось очень долго и странно). А все потому что тебе нужен метод MoveTowards вместо Lerp (у Color нет своего MoveTowards, но есть неявный каст в Vector4 и все методы оттуда с ним тоже будут работать). Либо оставить Lerp но переделать как-то так:

Код
public class changeColorGeometryMainMenu: MonoBehaviour {

    [SerializeField] [Range(0f, 1f)] float lerpTime;
    [SerializeField] Color[] newDeadLineColor;

    Image deadLineRenderer;
    Color startColor;
    Color endColor;
    float startTime;
    int colorIndex = -1;

    void Start() {
     deadLineRenderer = GetComponent<Image>();
     StartLerp();
    }

    void StartLerp() {
     startColor = deadLineRenderer.color;
     startTime = Time.time;
     colorIndex = (colorIndex + 1) % newDeadLineColor.Length;
     endColor = newDeadLineColor[colorIndex];
    }

    void Update() {

     var t = Mathf.Clamp01((Time.time - startTime) / lerpTime);

     deadLineRenderer.color = Color.Lerp(startColor, endColor, t);

     if (t == 1) {
      StartLerp();
     }

    }
}


Сообщение отредактировал drcrack - Суббота, 15 Мая 2021, 15:59
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг