Мерцание корутиной

Графический интерфейс пользователя

Мерцание корутиной

Сообщение pesiik 17 окт 2017, 16:44

Ребят, ломаю голову долгое время. Как накодить корутину на плавное повышение альфа канала, а потом его понижение, когда достигнуто максимальное значение? и т.д
pesiik
UNITрон
 
Сообщения: 223
Зарегистрирован: 01 авг 2015, 11:46

Re: Мерцание корутиной

Сообщение waruiyume 17 окт 2017, 17:05

Синтаксис:
  1. t=0 
  2. while(true) 
  3.   while(t<1) 
  4.   { 
  5.    do thigs 
  6.    t+=delta 
  7.    yield return null 
  8.   } 
  9.   while(t>0) 
  10.   { 
  11.    do thigs 
  12.    t-=delta 
  13.    yield return null 
  14.   } 
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Мерцание корутиной

Сообщение snezhok_13 17 окт 2017, 17:06

а лучше твин с Loop type = YoYo
Разработка игр, немножко игровая журналистика, сейчас делаем Календарь: даты выхода игр
Аватара пользователя
snezhok_13
UNIверсал
 
Сообщения: 450
Зарегистрирован: 09 сен 2013, 11:12
Skype: s.coremission
  • Сайт

Re: Мерцание корутиной

Сообщение samana 17 окт 2017, 19:30

Ещё синус или косинус от времени брать можно.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Мерцание корутиной

Сообщение Bill Gates 18 окт 2017, 07:32

Синтаксис:
Используется csharp
public class Flash : MonoBehaviour
{
    [SerializeField]
    private float duration = 1f;

    [SerializeField]
    private float count = 1f;

    [SerializeField]
    private Renderer renderer;

    private Color storedColor;

    private float precalculatedFactor;

    private float currentTime;

    private IEnumerator coroutine ()
    {
        while (true)
        {
            float t = Mathf.Abs (Mathf.Sin (precalculatedFactor * currentTime));

            float a = Mathf.Lerp (0f, 1f, t);

            renderer.material.color = new Color (storedColor.r, storedColor.g, storedColor.b, a);

            currentTime += Time.deltaTime;

            yield return 1;
        }
    }

    public void Enable (bool enabled)
    {
        currentTime = 0f;

        if (enabled)
        {
            StartCoroutine (coroutine ());
        }
        else
        {
            StopAllCoroutines ();

            renderer.material.color = storedColor;
        }
    }

    void Start ()
    {
        precalculatedFactor = Mathf.PI * count / duration;

        storedColor = renderer.material.color;

        if (renderer == null)
            renderer = GetComponent<Renderer> ();
    }

    void Update ()
    {

    }
}
 
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27

Re: Мерцание корутиной

Сообщение pesiik 18 окт 2017, 11:03

Всем спасибо! Первый вариант не сработает. Как только t достигнет границы, следующий кадр t станет меньше, а последующий кадр, по условию, опять будет инкрементить t.

хотя может я чего то не понимаю
pesiik
UNITрон
 
Сообщения: 223
Зарегистрирован: 01 авг 2015, 11:46

Re: Мерцание корутиной

Сообщение samana 18 окт 2017, 19:56

pesiik писал(а):Первый вариант не сработает. Как только t достигнет границы, следующий кадр t станет меньше, а последующий кадр, по условию, опять будет инкрементить t.

хотя может я чего то не понимаю

Там всё работать будет нормально L-)
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск


Вернуться в uGUI

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5