Добавить в корзинуПозвонить
Найти в Дзене

Простой пример пользы математики

Простой пример пользы математики Работаю над проектом и вот любопытное применение, на которое наткнулся. Чтобы голова не болела: есть бесконечный скролл с анимацией, зависящей от позиции. Карточки разного размера, но должны стыковаться. Зависимость нелинейная — получается эффект перспективы. Поскольку зависимость сложная, я придумал простой способ: тянем только первую карточку, а остальные подстраиваем по высоте прошлой. Работает! Но как сделать скролл бесконечным? Лента длиной в вечность — не мой вариант. Я создаю только видимые карточки. Переставлять их неудобно — алгоритм выравнивания усложняется. Вместо этого я смещаю ленту так, чтобы "тянущая" карточка ушла за экран, а её место заняла следующая, и возвращаю всё на позицию. По сути, та же перестановка, но без лишних операций. Но есть нюанс: анимации. Если контент меняется при "щелчке", то либо анимации сбиваются, либо начинаются заново. А причём тут математика? Вместо синхронизации анимаций я привязал их ко времени через период

Простой пример пользы математики

Работаю над проектом и вот любопытное применение, на которое наткнулся. Чтобы голова не болела: есть бесконечный скролл с анимацией, зависящей от позиции. Карточки разного размера, но должны стыковаться. Зависимость нелинейная — получается эффект перспективы.

Поскольку зависимость сложная, я придумал простой способ: тянем только первую карточку, а остальные подстраиваем по высоте прошлой. Работает! Но как сделать скролл бесконечным?

Лента длиной в вечность — не мой вариант. Я создаю только видимые карточки. Переставлять их неудобно — алгоритм выравнивания усложняется. Вместо этого я смещаю ленту так, чтобы "тянущая" карточка ушла за экран, а её место заняла следующая, и возвращаю всё на позицию. По сути, та же перестановка, но без лишних операций.

Но есть нюанс: анимации. Если контент меняется при "щелчке", то либо анимации сбиваются, либо начинаются заново. А причём тут математика? Вместо синхронизации анимаций я привязал их ко времени через периодические функции. Например левитация иконки:

_spriteRenderer.transform.localPosition = Mathf.Sin(Time.time * _speed + _spriteRenderer.transform.position.y) * _amplitude * Vector3.up;

Теперь анимации не зависят от перестановок и работают корректно.

Может, переставлять карточки было бы проще, но и это решение заняло секунды, когда знаешь "куда смотреть".

#оработе