Створення анімацій користувацького інтерфейсу ігор

Наша компанія з розробки відеоігор веде незалежні проекти, спільно з клієнтом створює ігри та надає додаткові операційні послуги. Досвід нашої команди дозволяє нам охопити всі ігрові платформи та розробити приголомшливий продукт, що відповідає баченню клієнта та перевагам гравців.

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Створення анімацій користувацького інтерфейсу ігор
Середня
~3 робочих дні
Часті питання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    491
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    533

Створення анімацій користувальницького інтерфейсу ігор

Анімація UI—це не прикраса. Це сигнальна система: відкриття екрана, підтвердження дії, отримання награди, попередження про помилку. Правильна анімація скорочує когнітивне навантаження—гравець розуміє, що сталося, без прочитання тексту. Неправильна анімація сердить: занадто повільна затримує геймплей, занадто різка пропускається непомітно.

Інструменти анімації UI в Unity: три підходи

Animator + Animation Clips—класика. Працює через Animator Controller на Canvas-об'єкті. Плюс: видимість у Unity Animator, підтримка Blend Trees, легко керувати через SetTrigger/SetBool. Мінус: важко керувати динамічно (якщо потрібно анімувати елемент в довільну позицію, відому тільки під час гри—Animator не допоможе прямо). Підходить для фіксованих переходів: відкриття/закриття екрана, pulse-ефект на кнопці, idle-анімація елемента.

DOTween—де-факто стандарт для code-driven UI анімацій у Unity. RectTransform.DOAnchorPos(), CanvasGroup.DOFade(), Image.DOColor()—все це через fluent API з можливістю sequencing. DOTween.Sequence() з .Append(), .Join(), .InsertCallback() дозволяє будувати складні скоординовані анімації з коду без візуального редактора. Важливий момент: DOTween працює в Update-циклі, що означає—при Time.timeScale = 0 (пауза гри) анімації UI зупиняються теж, якщо не використовувати SetUpdate(UpdateType.Normal, true) для ignoreTimeScale.

UI Toolkit Transitions—CSS-подібні transitions через USS: transition-property: translate; transition-duration: 300ms; transition-timing-function: ease-out;. Найбільш декларативний підхід, але з обмеженими можливостями порівняно з DOTween—тільки трансформації, непрозорість та колір. Добре працює для hover-ефектів та простих переходів станів.

Timing та easing: фізика анімації UI

Діапазони тривалості, які працюють:

  • Мікро-зворотна связь (hover, press): 80–120 мс
  • Появлення/скриття малого елемента (tooltip, badge): 150–200 мс
  • Перехід екрана (відкриття інвентаря, меню): 250–350 мс
  • Награди та fanfare-анімації: 600–1200 мс

Все, що більше 400 мс для утилітарних переходів—дратує при повторних відкриттях. Гравець відкриває інвентар сто разів за сесію. 600 мс перехід = хвилина потраченого часу тільки на очікування відкриття.

Easing функції не симетричні за призначенням. Ease Out (швидкий старт, повільний кінець)—для елементів, що з'являються: елемент вилітає швидко та м'яко приземлюється на місце, створюючи відчуття «приземлення». Ease In (повільний старт, швидкий кінець)—для елементів, що зникають: елемент повільно починається та швидко улітає. Ease In/Out—для переходів між станами, де немає чіткого «звідки» та «куди». Linear easing у UI майже ніколи не потрібен—виглядає механічно.

Overshoot та spring: коли фізика працює

Overshoot (анімація, яка трохи переходить за цільове значення та повертається) додає «ваги» та «характеру» елементу. DOTween надає Ease.OutBack та Ease.OutElastic. OutBack з strength 1.5–2.0 добре працює для pop-up сповіщень: елемент «випрригує» трохи за межі фінального розміру та повертається. OutElastic—для ігрових наград, лут-боксів, крітичних попаданнь, де потрібна енергійна реакція.

Важливе обмеження: overshoot анімації на великих екранних елементах (full-screen панелі) виглядають дивно. Це працює тільки для компактних елементів—іконок, кнопок, pop-up сповіщень.

Кейс: сповіщення про отримання предмета

На проекті потрібна була анімація всплюючого сповіщення при отриманні предмета: іконка + назва + опис. Анімація повинна була з'являтися без зупинки геймплею, утримуватися 2 секунди та зникати.

Реалізація через DOTween Sequence: іконка вилітає знизу з Ease.OutBack за 200 мс, одночасно (.Join()) фейд CanvasGroup.alpha з 0 до 1. Через 200 мс текст з'являється через DOFade за 150 мс (.AppendInterval(0.2f).Append(...)). Утримання—.AppendInterval(2f). Зникнення: зсув вправо + фейд за 200 мс з Ease.InCubic. Вся послідовність—15 рядків коду, переиспользується через NotificationController.Show(item).

Окремо вирішували проблему: при швидкому отриманні кількох предметів підряд нове сповіщення повинно було витіснити старе, а не накопичуватися в чергу. Рішення: при виклику Show() перевіряємо, є активний tween, убиваємо його через DOTween.Kill(targetTransform) та запускаємо нову анімацію.

Продуктивність UI-анімацій: де непомітно теряється FPS

Анімації в Canvas часто викликають Canvas Rebuild—перерахунок всієї UI-геометрії. Це відбувається кожен раз, коли змінюється щось у ієрархії Canvas: позиція, розмір, непрозорість. CanvasGroup.alpha не викликає Rebuild геометрії (тільки перерахунок непрозорості), а ось зміна RectTransform.position через DOTween—викликає.

Для анімацій переміщення це означає: анімувати через DOAnchorPos (зміна AnchoredPosition) безпечніше, ніж через DOMove (зміна World Position). AnchoredPosition працює в локальному просторі Canvas та викликає Rebuild тільки для змінного елемента та його батьків, World Position може потягнути за собою перерахунок всієї ієрархії.

Для scale-анімацій: transform.DOScale() на дочірньому об'єкті Canvas не викликає Canvas Rebuild взагалі—масштаб обробляється на рівні Transform, а не Layout системи. Це найдешевший тип UI-анімації. Саме тому pulse-ефект (легке збільшення/зменшення масштабу) такий популярний для call-to-action кнопок.

Розбивайте анімовані елементи на окремі Canvas'и. Якщо іконка в кутку екрана мигає для привернення уваги—вона повинна бути в своєму Canvas, щоб її Rebuild не перебудовував геометрію всього HUD кожен кадр.

Анімація станів кнопок: нюанси

Стандартна Button у uGUI з ColorTween анімує Highlight/Pressed/Disabled стани через Color. Це працює, але обмежено. Для кастомної поведінки краще використовувати DOTween-based UIAnimation компонент або переопредилити IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler.

Scale-анімація на кнопці при нажатті (Press: scale 0.95, Release: scale 1.0)—один з найпростіших та ефективних тактильних відгуків. 80 мс з Ease.OutQuad. Для мобільних платформ це особливо важливо, тому що тактильної вібрації під пальцем немає, а візуальний зворотний зв'язок критичний.

Тип роботи Строки
Анімації одного екрана (5–10 переходів) 2–5 днів
Повна анімація UI-комплекту (10–15 екранів) 2–5 тижнів
Складні fanfare-анімації (наград, рівнів) 1–2 тижні
Анімаційна система з керуванням з коду 1–3 тижні

Вартість визначається індивідуально після аналізу вимог до анімацій.