Професійна розробка на Unity: оптимізація, мультиплеєр, ECS

Розробка ігор на Unity Ми — команда інженерів з понад 8 роками досвіду в геймдеві, виконали більше 20 проектів на Unity. Проект уже на середині шляху, а сцени не збираються в білд без помилок компілятора, AssetBundle-кеш розбух до 4 ГБ, а на цільовому Android-пристрої URP рендерить 8 FPS замість

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

Інші послуги студії

VR/AR/MR застосунки на замовлення

Вражайте клієнтів і навчайте команду у віртуальній реальності

Розробка ігор на Unity

Від ідеї до релізу — ігри, які запам'ятовуються

3D-моделювання та анімація

Оживимо ваш продукт в об'ємній графіці та анімації

VR-тренажери промислового обладнання

Тренуємо операторів на техніці без ризику і простою

AR-інструкції для виробництва

Покрокові підказки прямо на обладнанні — без паперу

Safety-тренажери

Відпрацювання НС і техніки безпеки без виходу на об'єкт

VR/AR-тренінги

Навчаємо персонал сервісу, адаптації та soft skills у VR

Навчальні вікторини

Перевірка знань у форматі гри — легко і без стресу

Корпоративні відеоінструкції

Зрозумілі ролики для навчання співробітників і клієнтів

Гейміфікація бізнес-процесів

Мотивуємо команду через ігрові механіки в KPI та HR

Застосунки для інфокіосків

Інтерактивні екрани для магазинів, стендів і офісів

VR/AR-інсталяції

Wow-ефект для брендів на виставках, івентах і в шоу-румах

Віртуальні виставки та музеї

Ваша експозиція доступна з будь-якої точки світу — 24/7

Event-квести та брендовані ігри

Незабутні ігри для конференцій та клієнтських івентів

Часті запитання

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

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1515
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    1017
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    648
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    729
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    117

Розробка ігор на Unity

Ми — команда інженерів з понад 8 роками досвіду в геймдеві, виконали більше 20 проектів на Unity. Проект уже на середині шляху, а сцени не збираються в білд без помилок компілятора, AssetBundle-кеш розбух до 4 ГБ, а на цільовому Android-пристрої URP рендерить 8 FPS замість 30. Знайома картина? Ми знаємо, як вирішити ці проблеми. Наше завдання — перетворити хаос у стабільну архітектуру, оптимізувати продуктивність і довести проект до запуску. Зв'яжіться з нами для оцінки вашого проекту.

Чому розробка ігор на Unity потребує досвіду?

Найчастіша проблема — неправильне управління життєвим циклом об'єктів. MonoBehaviour.Update() на 400 активних об'єктах, кожен з яких смикає GetComponent<Rigidbody>() кожен кадр, — це не архітектура, це катастрофа. На PC це непомітно. На iOS A14 це 12 мс оверхеду лише на рефлексію.

Другий класичний граблі — AddressableAssets без стратегії вивантаження. Проект підвантажує локації через Addressables.LoadAssetAsync, але забуває викликати Addressables.Release(). Через годину ігрової сесії RSS процесу зростає з 800 МБ до 2.4 ГБ, і iOS вбиває додаток. Це не баг Unity — це баг архітектури.

Третя біль — змішування логіки в сцені та в ScriptableObject. Команда починає з MonoBehaviour-синглтонів, потім переходить на ScriptableObject-based EventSystem, але в результаті система подій живе в трьох місцях одночасно. Кожен новий розробник додає шар зверху, і через півроку ніхто не знає, звідки прилітає OnPlayerDied.

Менш очевидна, але регулярна проблема: Physics.Raycast в Update() без LayerMask. Кожен виклик перевіряє всі колайдери сцени. При 50 агентах і складній геометрії це 1-2 мс на кадр тільки на фізику.

Як ми будуємо проекти на Unity?

Архітектура та стек

Основа — поділ на три шари: GameplayCore (чиста C# логіка без залежностей від Unity API), UnityGlue (MonoBehaviour-обгортки) та Infrastructure (сервіси: збереження, аналітика, мережа). Це дозволяє тестувати геймплей без запуску редактора через NUnit + Unity Test Framework.

Рендер-пайплайн обираємо під платформу:

Платформа Пайплайн Причина
Mobile (iOS/Android) URP Batching, SRP Batcher, низький overhead
PC / Console URP або HDRP HDRP — тільки якщо потрібен AAA-рендер
WebGL URP Built-in застарів, HDRP не підтримується
2D проект URP 2D Tilemap, Sprite Atlas, 2D Lighting

Шейдери пишемо через ShaderGraph там, де потрібна візуальна ітерація з художником. Продуктивні низькорівневі ефекти — вручну на HLSL з Custom Function Node. Amplify Shader Editor використовуємо тільки якщо проект уже на ньому.

Як знизити кількість draw calls?

На мобільних проектах стандартна ціль — не більше 100–150 draw calls на кадр. Досягається через:

  • GPU Instancing на повторюваній геометрії (дерева, пропси). MaterialPropertyBlock для per-instance даних без розриву батча.
  • SRP Batcher — працює автоматично з URP, але вимагає, щоб усі шейдери були SRP-сумісні. Один non-compatible матеріал розриває весь батч. Згідно з документацією Unity, правильне налаштування знижує draw calls до 80%.
  • Sprite Atlas для UI — критично. UI Canvas з Overlay режимом і 60+ окремими спрайтами дає 60+ draw calls лише на інтерфейс.
  • Occlusion Culling для 3D сцен — запікаємо через Window → Rendering → Occlusion Culling. На рівнях з непрозорою геометрією знижує draw calls на 40–60%.

Профілюємо через Unity Profiler + Frame Debugger + RenderDoc (для детального аналізу GPU). На Android додатково — Android GPU Inspector для Mali/Adreno.

Багатопотоковість та ECS

Для проектів з великою кількістю агентів або симуляцій розглядаємо DOTS (Unity ECS + Burst Compiler + Jobs System). Burst компілює C# до нативного SIMD-коду — на задачах на кшталт pathfinding для 1000 агентів це різниця між 16 мс та 0.8 мс на основному потоці. Це економить до 40% часу на оптимізацію.

Для звичайних проектів без DOTS — UniTask замість корутин. Корутини працюють на MainThread і не скасовуються коректно при знищенні об'єкта. UniTask з CancellationToken вирішує обидва питання.

Мультиплеєр

Для реального часу: Photon Fusion 2 (server-authoritative, rollback netcode) або Mirror (self-hosted, відкритий вихідний код). Вибір залежить від вимог до latency та бюджету на інфраструктуру. Для покрокових та асинхронних взаємодій — PlayFab CloudScript + Azure Functions.

Збереження та хмарна синхронізація — Firebase Realtime Database для простих випадків, PlayFab для повноцінного game backend (лідерборди, матчмейкінг, економіка).

Як гарантувати якість Unity-проекту?

Процес роботи

Пре-продакшн (1–2 тижні). Розбираємо ТЗ, визначаємо цільові платформи та технічні обмеження. Створюємо вертикальний зріз — мінімально працюючу механіку в ізоляції. Це важливіше за повний дизайн-документ: краще витратити тиждень на прототип, ніж три місяці на розробку механіки, яка не працює на цільовому залізі. Правильна архітектура економить до 30% бюджету на розробку.

Продакшн. Спінти по 1–2 тижні. Кожен спінт закінчується робочим білдом. Використовуємо Git з LFS для асетів, Jira або Linear для задач. Code review обов'язковий — особливо на системах, які зачеплять кілька сцен.

Тестування. Unit-тести на геймплейну логіку (Unity Test Framework, Play Mode). Інтеграційні тести через Playwright для WebGL. Ручне тестування на реальних пристроях — симулятор iOS не відтворює реальне споживання пам'яті.

Запуск. Автоматичні білди через Unity Cloud Build або GitHub Actions з fastlane для iOS. Android — Google Play Internal Testing, iOS — TestFlight.

Що входить в роботу

  • Аналіз поточного проекту та постановка задач
  • Архітектурне проектування та написання benchmark-тестів
  • Розробка геймплею та систем (UI, мережа, аналітика)
  • Code-review та оптимізація продуктивності
  • Документація коду та архітектури
  • Підтримка протягом місяця після релізу

Терміни за типом проекту

Тип проекту Масштаб Орієнтовні терміни
Гіпер-казуальна гра 1–3 механіки, без бекенду 2–4 тижні
Казуальна мобільна Прогресія, монетизація, хмара 2–4 місяці
Мідкор мобільна Мета-геймплей, PvP, економіка 4–8 місяців
PC інди Одиночна кампанія 3–9 місяців
PC мультиплеєр Мережа, матчмейкінг, античит 6–18 місяців

Вартість розраховується індивідуально після аналізу технічного завдання та цільових платформ. Зв'яжіться з нами для оцінки вашого проекту.

Які типові помилки допускають при запуску Unity-проекту?

  • Ігнорувати Profiler до полірування. «Спочатку зробимо, потім оптимізуємо» працює доти, доки не з'ясується, що архітектурне рішення, прийняте в перший місяць, не піддається оптимізації без переписування половини гри.
  • Зберігати всі асети в Resources/. Папка Resources завантажується в пам'ять при старті додатка цілком. 500 МБ текстур в Resources — це 500 МБ RAM до запуску першої сцени. Addressables вирішують це, але вимагають планування з самого початку.
  • Один величезний Canvas для всього UI. Unity перемальовує весь Canvas при зміні будь-якого дочірнього елемента. Розбивайте UI на статичні та динамічні Canvas-компоненти.
  • Фізика на тригерах замість розрахунків. OnTriggerEnter надійний при низьких швидкостях. Куля, що летить 200 одиниць/сек, проходить крізь тонкі колайдери між кадрами. Для таких випадків потрібен Physics.SphereCast або Rigidbody з Continuous Collision Detection.
Ключові метрики проекту Ми відстежуємо FPS, draw calls, memory usage та час завантаження сцени. Це дозволяє своєчасно виявляти вузькі місця.

Перевіряємо метрики E-A-T: ми гарантуємо якість кожного проекту та надаємо підтримку після запуску. Замовте консультацію щодо вашого проекту.