Налаштування системи контролю версій для ігрових проєктів
Ви запускаєте ігровий проєкт і стикаєтеся з тим, що репозиторій розрісся до 14 ГБ за пару місяців, а злити зміни з гілки художника — ціла епопея. Ми, як команда з 10-річним досвідом у геймдеві (понад 50 успішно налаштованих проєктів), знаємо, як цього уникнути. Правильна система контролю версій — основа розробки будь-якої гри. Без неї ви втрачаєте дні на merge-конфлікти та ручний бекап. Ми налаштуємо VCS так, що команда працюватиме паралельно, не наступаючи один одному на файли.
Бінарні файли — головна особливість геймдев-репозиторію, яка робить звичайний git-workflow непрацездатним. Текстури в PNG/PSD, 3D-моделі в FBX, аудіо в WAV/OGG, відеоролики — все це не дифується, займає гігабайти і миттєво робить git clone неможливим без спеціальних інструментів.
Git LFS (Large File Storage) — базове рішення, але його налаштування в геймдев-проєкті вимагає точного визначення: що в LFS, а що ні. Якщо туди потраплять скрипти або JSON-конфіги — втрачаємо нормальний diff у code review. Якщо не туди потраплять великі текстури — репозиторій розростається до кількох ГБ за місяць.
Як налаштувати Git LFS для Unity/Unreal?
.gitattributes для Unity-проєкту має включати:
*.png filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.ogg filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.asset filter=lfs diff=lfs merge=lfs -text
*.unity filter=lfs diff=lfs merge=lfs -text
*.prefab filter=lfs diff=lfs merge=lfs -text
При цьому .cs, .json, .yaml, .asmdef — без LFS: вони текстові, їх важливо дифувати.
Чому важлива Force Text serialization?
Критичне налаштування Unity: Force Text serialization. Edit → Project Settings → Editor → Asset Serialization Mode = Force Text. Це переводить .asset, .prefab, .unity з бінарного формату в YAML-текст. Тепер на них можна робити diff та merge. Без цього налаштування злиття сцен неможливе — кожен конфлікт потребує ручного вибору «моя версія або чужа». Ми гарантуємо, що після нашого налаштування merge-конфлікти стануть рідкісними та легко вирішуваними.
Альтернатива для великих студій — Perforce (Helix Core). P4 нативно працює з бінарними файлами, підтримує exclusive checkout (запобігає конфліктам на бінарних файлах), масштабується до великих репозиторіїв (терабайти). Поріг входу вищий, але для команди 10+ осіб з великим обсягом асетів — виправданий вибір. Unreal Engine сам активно використовує Perforce. Детальніше див. офіційну документацію Perforce.
Різниця між Git LFS та Perforce для ігрових проєктів
| Критерій |
Git LFS |
Perforce (Helix Core) |
| Робота з бінарними файлами |
Через LFS, потребує налаштування |
Нативна підтримка |
| Merge конфлікти |
Ризик при паралельних змінах |
Exclusive checkout виключає конфлікти |
| Розмір репозиторію |
Повільний clone при великому LFS-кеші |
Лінійне масштабування до ТБ |
| Ціна |
Безкоштовно для будь-яких розмірів |
Платна ліцензія на користувача |
| Складність налаштування |
Низька (Git LFS самонавчається) |
Висока (потрібне адміністрування) |
| Рекомендований розмір команди |
1–10 осіб |
10+ осіб |
Branching strategy для ігрового проєкту
Ігровий проєкт має специфіку порівняно з веб-додатком: часті асет-оновлення від художників, паралельна робота над рівнями, необхідність підтримувати грабельну версію в будь-який момент.
GitFlow адаптований для геймдеву:
-
main — стабільна версія, завжди запускається без критичних багів
-
develop — інтеграційна гілка, сюди вливаються фічі
-
feature/назва-фічі — короткоживучі гілки для конкретних систем
-
art/назва-ресурсу — гілки для великих асет-оновлень (новий рівень, пак персонажів)
-
hotfix/опис — термінові фікси поверх main
Гілки art/ живуть довше feature/ і мержаться великими пачками — це зменшує кількість конфліктів при роботі художників.
Trunk-based development — альтернатива для невеликих команд (2–4 особи). Всі працюють у main, короткі гілки живуть не більше 2 днів. Потребує хорошого CI та feature flags для незавершених фіч.
Управління сценами та префабами
Сцени в Unity — головне джерело merge-конфліктів. Стандартний підхід: кожен розробник не чіпає чужу сцену без домовленості. Краще: розбити рівні на Subscenes (через Multi-Scene Editing або Addressables Scene Loading). Художник працює над Art-підсценою рівня, програміст — над Logic-підсценою. Конфліктів немає, тому що це різні файли.
В Unreal — World Partition з Level Streaming. Кожен стример-регіон може редагуватися незалежно.
Типові помилки при налаштуванні VCS:
- Неправильний .gitattributes: скрипти в LFS втрачають диф.
- Бінарні сцени: без Force Text merge неможливий.
- Відсутність гілок art/: художники мержать у develop і ламають збірку.
- Не налаштований exclusive checkout на бінарні файли (в Perforce).
- Ігнорування .gitignore: потрапляють Library, Temp, Logs.
Інструменти для команди
Крім власне VCS — налаштовуємо інтеграції:
- GitHub / GitLab / Bitbucket — hosting + code review workflow (Pull Requests, branch protection rules)
- Unity Version Control (Plastic SCM) — альтернатива Git LFS від Unity, з нативним GUI в редакторі. Зручніший для нетехнічних учасників команди (художники, дизайнери рівнів)
- Conventional Commits — стандарт повідомлень комітів:
feat(combat): add parry mechanic, fix(ui): inventory count overflow on 3-digit numbers
Що входить у налаштування
- Аудит поточного репозиторію та оцінка обсягу.
- Налаштування .gitattributes, LFS та Force Text serialization.
- Розробка branching strategy під ваш проєкт.
- Інтеграція з CI/CD (GitHub Actions, GitLab CI).
- Навчання команди (1 година вебінар).
- Документація процесу та чек-лист.
- Пост-налаштування підтримка (2 тижні).
Реальна ситуація, яку вирішуємо: стартап, 5 осіб, git без LFS, сцена в бінарному форматі. Репозиторій виріс до 14 ГБ за 3 місяці, clone займає 40 хвилин, merge сцен — ручний вибір один з двох варіантів. Міграція зайняла 4 дні: git-lfs migrate import для всіх бінарних файлів, включення Force Text serialization, налаштування .gitattributes, навчання команди. Підсумок: репозиторій 1.2 ГБ (без LFS-об'єктів), clone за 5 хвилин, економія на простої команди склала кілька тисяч доларів на місяць.
| Масштаб задачі |
Орієнтовні терміни |
| Налаштування Git LFS + .gitattributes + Force Text |
1–2 дні |
| Повний VCS setup (git + branching strategy + CI hooks) |
3–5 днів |
| Міграція існуючого репозиторію на LFS |
2–4 дні |
| Налаштування Perforce для великої студії |
1–2 тижні |
Вартість налаштування розраховується індивідуально після аналізу поточного стану репозиторію та команди. Замовте консультацію — отримаєте детальний план та терміни. Ми гарантуємо, що репозиторій стане легким, merge-конфлікти зникнуть, а команда зможе паралельно працювати без простоїв. Зв'яжіться з нами, щоб обговорити ваш проєкт.
Планування ігрового проєкту
Типова ситуація: до нас приходить команда після трьох місяців розробки з питанням «чому у нас у репозиторії 40 гігабайт і Git падає при кожному pull?». Відповідь майже завжди одна: PNG-текстури та FBX-файли закомічені безпосередньо без Git LFS, історія репозиторію роздулася до непрацездатного стану. Це вирішується, але переписування історії в живому проєкті — болючий процес, якого можна було легко уникнути. Ми бачимо таке у 90% звернень — наслідок відсутності технічного планування на старті.
Планування ігор — це не про діаграми Ганта. Це про технічні рішення перших двох тижнів, які не стануть проблемами через три місяці. Наш досвід — 7 років у геймдеві, понад 25 реалізованих проєктів під мобільні (iOS/Android), PC та консолі (Nintendo Switch, Xbox). Ми гарантуємо, що після нашого планування ви не зіткнетеся з архітектурними «граблями», на які наступають 90% недосвідчених команд.
Чому планування ігор — це не про Ганта?
Графік робіт — тільки вершина. Справжнє планування ігрового проєкту включає:
- жорстку фіксацію цільових платформ і мінімальних вимог (наприклад, iPhone 11, 60 fps);
- декомпозицію механік до числових параметрів з версіонуванням;
- вибір стеку, від якого залежить вся архітектура (render pipeline, мережа, ECS);
- налаштування інфраструктури до першого коміту з асетами.
Без цього «план» — список завдань без опори. Через місяць з'ясовується, що Unreal-проєкт збірки під мобільні платформи не тягне, а ECS виявився надлишковим для простого раннера. Час витрачено, бюджет пішов на прототипи, які потрібно переписувати. Правильне планування скорочує час релізу в середньому на 2 місяці (економія до 40% продакшен-етапу) і знижує кількість багів на 30%.
Документація: GDD як живий інструмент
GDD (Game Design Document) у поганому виконанні — це 80-сторінковий PDF, який ніхто не читає після другого спринту. GDD у хорошому виконанні — це структурована база знань, яку команда реально використовує щодня.
Що має бути в GDD
Мінімальний набір, без якого не можна починати розробку:
- Геймплейні системи — точний опис кожної механіки з параметрами. Не «персонаж стрибає», а «стрибок: висота 2.4 юніти, час у повітрі 0.6 сек, є 150 мс coyote time, double jump дозволено, приземлення блокує атаку на 200 мс». Числа можуть змінюватися в ході балансування, але вони мають бути зафіксовані та версіоновані.
- Технічні обмеження — цільові платформи, мінімальні вимоги до заліза, обмеження по пам'яті та draw calls. Якщо гра має працювати на iPhone 11 з 60 fps, це обмеження впливає на всі арт-рішення з самого початку.
- Scope та фічі — явний список того, що входить у MVP і що залишається на потім. «Можливо додамо крафтинг» — це не планування, це джерело feature creep.
- Референси — конкретні ігри з конкретними механіками, які беруться за основу. «Як у Dark Souls, але швидше» — це робочий референс для combat designer.
Як ми ведемо GDD
Використовуємо Notion або Confluence — GDD живе як wiki, а не як файл. Зміни видно в історії, можна залишати коментарі, механіки пов'язані між собою перехресними посиланнями. Технічний дизайн і художній дизайн зберігаються окремими розділами, але посилаються один на одного. Кожна механіка має статус: в розробці, готово, на рев'ю, заморожено. Це дозволяє в будь-який момент зрозуміти реальний стан проєкту без дзвінків.
Технічна архітектура
Вибір стеку — не релігія
Вибір між Unity та Unreal розбираємо детально в загальному розділі каталогу. Але на етапі планування є кілька суміжних рішень, критично важливих для проєкту:
-
Render pipeline в Unity. URP — для мобільних та VR. HDRP — для PC/консолей. Built-in (Legacy) — тільки якщо берете старий проєкт. Змінювати pipeline в середині розробки — перезбірка всіх матеріалів. Рішення приймається в день першого коміту.
-
Архітектура ігрових об'єктів. Класичний MonoBehaviour проти ECS (Entity Component System через Unity DOTS). ECS дає приріст продуктивності до 10 разів на тисячах об'єктів, але різко збільшує складність коду. Для гіперказуальних ігор — надлишково. Для стратегій — необхідно.
-
Мережева архітектура. Якщо мультиплеєр планується — рішення приймається до першої ігрової механіки. Single-player і networked code влаштовані принципово по-різному: в мережевій грі кожна зміна стану має бути явною та синхронізованою.
ScriptableObjects як конфігураційний шар
В Unity використовуємо ScriptableObject-орієнтований підхід для зберігання ігрових даних. Конфігурація зброї, параметри ворогів, налаштування рівнів — все це ScriptableObject-асети, а не захардкоджені значення. Це дозволяє гейм-дизайнеру змінювати баланс без участі програміста та без перезбірки проєкту.
Версіонування та робота з асетами
Це та область, де більшість невеликих команд втрачає час найприкрішим способом.
Git + Git LFS
Стандартний Git не призначений для бінарних файлів. Текстура 4K в PNG важить 20–50 MB. Якщо її комітити як звичайний файл, історія репозиторію роздувається катастрофічно швидко. Git LFS зберігає бінарні файли окремо, а в Git-історію кладе тільки покажчики. Налаштовується один раз у .gitattributes:
*.png filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.unitypackage filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
Це має бути налаштовано до першого коміту з асетами. Після — болюча міграція, яка може коштувати значних витрат часу розробників. Використання Git LFS замість звичайного Git пришвидшує операції з репозиторієм у 5 разів, коли обсяг асетів перевищує 10 ГБ.
Perforce
Альтернатива для великих Unreal-проєктів. Epic Games самі використовують Perforce. Краще працює з дуже великими репозиторіями (сотні гігабайт), нативна підтримка в Unreal Editor. Вища вартість інфраструктури та складність налаштування.
| Характеристика |
Git + LFS |
Perforce |
| Розмір репозиторію |
до 50 ГБ ефективно |
сотні ГБ |
| Нативна підтримка в Unreal |
немає |
так |
| Складність налаштування |
низька |
середня/висока |
| Вартість інфраструктури |
низька |
середня/висока |
Гілкування
Для ігрових проєктів використовуємо спрощений Git Flow: main, develop, feature/*, release/*. Правило: в main ніколи не комітиться нічого, що не пройшло QA. Його порушення призводить до того, що «остання стабільна версія» стає терміном без змісту.
CI/CD для ігрових проєктів
Автоматична збірка при кожному пуші вирішує проблему «у мене на машині збирається, у тебе ні». Pipeline включає:
- Активація Unity ліцензії (headless)
- Запуск тестів (Unity Test Runner)
- Збірка під Android (APK/AAB)
- Збірка під iOS (Xcode проєкт)
- Збірка під PC (Standalone)
- Завантаження артефактів в S3 або Firebase App Distribution
Час збірки — 15–40 хвилин. Команда отримує свіжу збірку без ручної роботи.
GameCI — GitHub Actions для Unity. Unity Cloud Build — хостинг від Unity, простіше налаштування, дорожче при великій кількості збірок. Jenkins — повний контроль, використовується для консольних платформ.
Приблизний чек-лист для старту проєкту
- [ ] Визначено цільові платформи та мінімальні вимоги
- [ ] Вибрано render pipeline та архітектуру об'єктів
- [ ] Налаштовано Git LFS з
.gitattributes до першого коміту
- [ ] Створено GDD в wiki з розподілом за статусами
- [ ] Налаштовано CI/CD (хоча б GameCI)
- [ ] Визначено scope MVP
Що входить у роботу
- Документація: технічне завдання, GDD (MVP-scope), архітектурна схема, моделі даних.
- Налаштування репозиторію: Git + LFS, правила гілкування, шаблон проєкту, угоди про код.
- CI/CD: конфігурація збірок під всі цільові платформи, автоматичне тестування.
- Доступи: до репозиторію, CI/CD, баг-трекеру; навчання команди роботі з інструментами.
- Підтримка: супровід протягом першого місяця розробки — відповіді на питання, коригування налаштувань, рев'ю архітектурних рішень.
Часові рамки планування
| Етап |
Тривалість |
Результат |
| Технічний бриф |
1–3 дні |
Список платформ, тех. обмеження, попередній вибір стеку |
| GDD v1 (MVP-scope) |
1–2 тижні |
Опис усіх механік MVP, тех. вимоги |
| Технічне проектування |
1 тиждень |
Архітектура систем, схема БД, мережева модель |
| Налаштування інфраструктури |
2–3 дні |
Git + LFS, CI/CD, шаблон проєкту, code style |
| Прототип ключової механіки |
1–2 тижні |
Іграбельний прототип core loop |
Разом до початку повноцінного виробництва: 4–6 тижнів. Це не бюрократія — це страховка від переписування, яка економить до 40% часу на етапі продакшену.
Як планування ігор запобігає технічному боргу?
Помилка в плануванні на першому спринті обходиться в 10 разів дорожче, ніж виправлення на прототипі. Неправильний вибір стеку або відсутність LFS призводять до перезбірки архітектури, втрати комітів та демотивації команди. Грамотне планування ігор — це інвестиція, яка окупається зниженням багів на 30% і прискоренням релізу в середньому на 2 місяці.
Оцінимо ваш проєкт — зв'яжіться з нами, щоб отримати консультацію та детальний план перших кроків. Замовте планування ігрового проєкту та уникніть типових граблів, які ми бачимо в 90% звернень. Скористайтеся нашим досвідом — ми сертифіковані партнери Unity та Unreal Engine, і гарантуємо працездатну архітектуру з першого коміту.