Работаю над проектом и вот любопытное применение, на которое наткнулся. Чтобы голова не болела: есть бесконечный скролл с анимацией, зависящей от позиции. Карточки разного размера, но должны стыковаться. Зависимость нелинейная — получается эффект перспективы.
Поскольку зависимость сложная, я придумал простой способ: тянем только первую карточку, а остальные подстраиваем по высоте прошлой. Работает! Но как сделать скролл бесконечным?
Лента длиной в вечность — не мой вариант. Я создаю только видимые карточки. Переставлять их неудобно — алгоритм выравнивания усложняется. Вместо этого я смещаю ленту так, чтобы "тянущая" карточка ушла за экран, а её место заняла следующая, и возвращаю всё на позицию. По сути, та же перестановка, но без лишних операций.
Но есть нюанс: анимации. Если контент меняется при "щелчке", то либо анимации сбиваются, либо начинаются заново. А причём тут математика? Вместо синхронизации анимаций я привязал их ко времени через периодические функции. Например левитация иконки:
_spriteRenderer.transform.localPosition = Mathf.Sin(Time.time * _speed + _spriteRenderer.transform.position.y) * _amplitude * Vector3.up;
Теперь анимации не зависят от перестановок и работают корректно.
Может, переставлять карточки было бы проще, но и это решение заняло секунды, когда знаешь "куда смотреть".
#оработе
