Розробка ранера: де ламається утримання гравців
Безкінечний забіг ламається передбачувано: через вісім-десять спроб гравець запам’ятовує ритм перешкод і перестає помилятися — разом із напругою зникає й інтерес.
У мобільній грі-ранері це помітно раніше, ніж в інших жанрах, бо ядро механіки — повтор однієї й тієї самої дії, і якщо траси однотипні, десята спроба не відрізняється від третьої.
З боку даних картина виглядає як обрив: сесії короткі, повернення на другий-третій день падають, але незрозуміло, де саме зірвалося утримання гравців — на першій перешкоді, на зміні швидкості чи на довгій ділянці без перепочинку.
Розмітити забіг за сегментами й зібрати статистику за кожним зазвичай нічим: генерація видає потік, а не описаний рівень.
При цьому утримання гравців тримається на керованій варіативності: гравець має впізнавати правила й не впізнавати розстановку.
Процедурна генерація рівнів дає це лише в жорстких рамках — бібліотека перевірених блоків, крива складності, обов’язкові паузи на відновлення, правила сумісності сусідніх перешкод.
Без рамок виходить шум: непрохідні зв’язки й розкид за часом проходження ширший, ніж сама складність.
Розробка ранера тому починається не з малювання рівнів, а з моделі траси й метрик. Розбираємо, як це закривається: як будується генератор із контролем складності, як забіг отримує розмітку під аналітику і за якими даними видно точку, де гравець іде.
Що дає керована процедурна генерація рівнів
Ручне складання трас обмежує ранер швидкістю команди: 15–20 рівнів на тиждень, кожен вивіряється наживо, а сильний гравець проходить весь контент за кілька вечорів. Сесія тримається близько хвилини: за невдалої щільності перешкод забіг відчувається нечесним, і його покидають.
Автоматична побудова трас переносить цю роботу в правила. Рівень збирається із сегментів, у кожного описано точки входу й виходу, щільність перешкод і обов’язковий прохідний коридор.
Валідатор проганяє зібрану ділянку на розв’язність за поточної швидкості й відкидає варіанти, де вікно реакції менше за поріг.
Динамічна складність задається кривою, прив’язаною до темпу гравця й кількості падінь, а не до номера рівня. Щільність і розкид перешкод зростають у заданих рамках балансу: складність підтягується до сильного гравця й не обрушується на новачка.
Ефект вимірний. Довжина ігрової сесії зросла з 60–90 секунд до трьох із лишком хвилин, частка повторних забігів — приблизно вдвічі, покинуті спроби на перших 30 секундах скоротилися з 40% до 18%. Правка правил займає пару годин замість тижнів ручного складання.
Орієнтир щодо динаміки в жанрі — Subway Surfers: та сама безкінечна стрічка, але крива складності в нас налаштовується під конкретний показник утримання, а баланс рівня перевіряється звітом — де гравці частіше падають і які сегменти випадають із генерації.
Режими побудови трас: порівняння підходів
Схема побудови траси визначає, з якою швидкістю ви випускаєте нові сезони і наскільки передбачуваний баланс. У ранері це чутливіше, ніж у більшості жанрів: гравець проходить рівень десятки разів, тому потрібні водночас упізнаваність і варіативність. Нижче — три схеми, між якими реально обирають на старті.
| Варіант | Коли підходить | Обмеження |
|---|---|---|
| Повністю процедурна генерація | Безкінечний режим, довга дистанція, невелика команда дизайнерів рівнів | Складно гарантувати чесну складність: піки перешкод потребують налаштування параметрів за статистикою проходжень |
| Ручні траси | Кампанія, навчання, забіги на рекорд з однаковими умовами для всіх | Кожна нова траса — час дизайнера; за частого повтору гравець запам’ятовує все напам’ять |
| Гібридний рівень: процедурне складання з ручних сегментів | Безкінечний потік контенту плюс керований баланс, змагальні режими | Дорожче на старті: потрібна бібліотека сегментів, правила стикування й перевірка на прохідність |
Гібрид зазвичай беруть, коли гра живе на сезонних оновленнях: дизайнер робить сегменти, а генератор збирає з них трасу під поточну складність.
Тоді параметри генерації — щільність перешкод, довжина безпечного вікна, крок ускладнення й стартове зерно — стають частиною балансу, а не налаштуванням «на око».
Окремо фіксуємо зерно генерації: без нього не можна відтворити баг на конкретній трасі або повторити рекордний забіг, а отже, і розбирати скарги гравців доводиться наосліп. Розбираємо, як це закривається у вашому проєкті.
Етапи розробки ранера: від прототипу до релізу
Порядок етапів вибудувано так, щоб кожен наступний крок спирався на вже перевірену цифру, а не на «здається, грається».
Механіка, генератор і баланс перевіряються на сірому прототипі задовго до появи фінальної графіки — так правки коштують години роботи, а не переробку рівнів і анімацій. Монетизація підключається останньою, коли цикл сесії вже стабільний.
- Розбір механіки. Фіксуємо довжину забігу, набір перешкод, вісь керування й умови програшу. Різне розуміння цих речей спливає тут, а не на релізі.
- Прототип ранера. Сірі блоки, чесна фізика стрибка й ковзання. Міряємо час до першої смерті й з якого разу гравець проходить ділянку — за цими числами правимо чутливість керування.
- Схема генератора. Визначаємо, з яких блоків збирається траса, їхні ваги, правила ускладнення й коридори гарантованої прохідності.
- Налаштування генератора. Проганяємо тисячі автоматичних забігів, дивимося частку непрохідних зв’язок і розкид складності. Правимо ваги й правила, а не окремі рівні вручну.
- Перевірка балансу. Крива складності за дистанцією, тривалість сесії, частка виходів на першій хвилині. Сюди ж додаємо нагороди й рекламні включення, щоб вони не ламали темп.
- Підготовка до публікації. Збірки під магазини, політика конфіденційності, навчальний перший запуск, тестові треки й робота з відгуками.
- Передача проєкту. Репозиторій, документація за параметрами генератора й економіки, навчання команди замовника — подальші правки балансу робляться вже без нас.
Що залишається в проєкті після передачі
Передача не закінчується на зібраному білді в магазині застосунків. Разом із релізом замовник отримує весь комплект, яким застосунок живе далі: код, налаштування генерації, правила складності й регламент випуску нових версій.
Усе складається в репозиторій замовника, доступи оформлюються на його акаунти, а за кожним пунктом проходить розбір із командою.
- Вихідний код застосунку й ігрової логіки цілком, включно із захищеною збіркою — проєкт перезбирається силами будь-якої іншої команди, без закритих модулів і «чорних ящиків».
- Конфігурація генератора: параметри процедурних ділянок, таблиці ваг і шаблони сегментів траси. Правка балансу рівня не потребує правок у коді.
- Правила складності: крива зростання швидкості, вікна невразливості після відродження, пороги появи перешкод — зведені в одну таблицю з описом, а не розкидані по логіці.
- Документація проєкту: карта модулів, точки інтеграції з рекламними й аналітичними модулями, порядок локального запуску й збирання релізної версії.
- Регламент оновлень: як готується версія, хто і за якими перевірками її приймає, як виконується відкат на попередню збірку при регресії.
- Доступи й інфраструктура: акаунти магазинів застосунків, ключі підпису, кабінети аналітики й рекламних мереж — переведені на власника продукту.
- Панель метрик: утримання за днями, конверсія в перший рівень, тривалість сесій і воронка монетизації — видно, де гравець відпадає.
Такий комплект знімає головний ризик розробки ранера: через пів року ніхто не пам’ятає, чому складність зростає саме так і який параметр відповідає за частоту бонусів.
Кейс: утримання й довжина сесії до і після
Проєкт — ранер із безкінечним забігом і процедурною генерацією траси. На старті складність наростала за номером рівня: гравець або проходив відрізок із першої спроби, або впирався в непрохідну зв’язку перешкод і закривав застосунок.
Метрики утримання показували це прямо: 2,1 забігу за сесію, довжина сесії близько трьох хвилин, на другий день поверталося менше чверті тих, хто встановив.
Спочатку зібрали телеметрію за кожним забігом: точку, де гравець припиняв спробу, кількість спроб до виходу, інтервал між запусками.
Відтік концентрувався у двох місцях — на перших 40 секундах, коли новачок не встигав зчитати патерн перешкод, і на ділянках, де генератор видавав комбінації без вікна для реакції.
Що змінили в генерації
Задали генератору керовані параметри: щільність перешкод, гарантоване вікно реакції, розподіл нагород за ризик, окрема стартова крива для перших забігів. Складність стала функцією від показників гравця — пройдених метрів, точності ухилянь, серій без втрат — а не від номера рівня. Після двох невдалих спроб підряд генератор знижує щільність на складних ділянках.
Результат упровадження за когортами в Google Play: забігів за сесію стало 4–5, середня довжина сесії зросла до семи хвилин, частка повторних запусків застосунку наступного дня вища в 1,8 раза. Частка гравців, які дійшли до третього відрізка траси, зросла з 41% до 68%.
Чим процедурна генерація відрізняється від ручних трас?
Ручна траса — це авторський набір сегментів, де дизайнер вручну розставляє перешкоди, нагороди й ритм рівня.
Генерація — правило плюс зерно: алгоритм збирає трасу із заздалегідь підготовлених блоків за вагами, і однакове зерно завжди дає один і той самий результат — це потрібно для повторних спроб і чесних таблиць лідерів.
Ключова відмінність — передбачуваність. У ручному дизайні крива складності задається точно: відомо, де гравець отримає перепочинок, а де впреться в стіну.
У генерації складність — похідна від параметрів, і без валідатора з’являються непрохідні зв’язки: розрив ширший за стрибок за поточної швидкості. Тому прохідність перевіряють на етапі складання сегмента, а не після скарг гравців.
Швидкість випуску контенту відрізняється кратно. Ручний рівень — години роботи дизайнера й повторне налагодження під кожен розмір екрана. Новий набір для генератора — правка ваг: той самий код видає інший характер трас, обсяг зростає без зростання ручної праці.
Зворотний бік — супровід: помилка живе не в одному рівні, а в розподілі, тому у збірку закладають прогони десятків тисяч сесій.
| Варіант | Коли підходить | Обмеження |
|---|---|---|
| Ручні траси | Навчальні рівні та точна драматургія | Обсяг зростає лише з кількістю дизайнерів |
| Повна генерація | Безкінечний режим, щоденні випробування | Баланс тримається лише на валідаторі |
| Гібрид | Основний режим: генерація та якірні ділянки | Складніший у підтримці — дві системи та їхнє стикування |
Технічні сумніви щодо генерації та балансу
Сумніви навколо процедурної генерації зазвичай конкретні: чи не збереться непрохідна ділянка, чи потягне слабкий пристрій і чи доведеться перезбирати застосунок заради правки балансу. Нижче — як кожен з них закривається на рівні коду, а не обіцянок.
Як гарантується, що ділянка завжди прохідна?
Траса не будується «як вийде»: вона збирається із заздалегідь вивірених блоків перешкод з відомими вікнами прохідності, а конкретне розкладання задає числове зерно.
Після складання маршрут проходить автоматичну перевірку — віртуальний прогін по всіх смугах із запасом за часом реакції й контролем досяжності кожної платформи. Якщо перевірку не пройдено, зерно відкидається й розкладання перезбирається, доки не з’явиться валідний варіант. Гравець не отримує комбінацію, яку неможливо пройти.
Як балансується крива складності?
Крива задається не вручну за рівнями, а профілем: швидкість, щільність перешкод, частка вузьких місць і частота бонусів змінюються за настроюваною функцією від пройденої дистанції.
Профілі описані окремими наборами параметрів, тому один генератор видає спокійний початок, пікові відрізки й паузи на відновлення. Крива перевіряється масовими автопрогонами ботів із різною реакцією — за ними видно, де складність зростає швидше, ніж гравець устигає адаптуватися.
Чи потягне генерація слабкий пристрій?
Рахується лише те, що потрапляє в кадр: перешкоди й декорації беруться із заздалегідь підготовленого набору об’єктів і повертаються в нього після проходження, замість постійного створення нових.
Для слабких пристроїв діє окремий профіль якості — спрощені матеріали, менше декоративних шарів, рідше оновлення ефектів, при цьому логіка рівня й зони влучання не змінюються, щоб гра залишалася чесною. Бюджет кадру замірюється на реальних слабких моделях, а не лише на стенді розробника.
Чи можна правити контент і баланс без перезбирання?
Так. Параметри профілів складності, набори блоків, таблиці нагород і розклад подій винесені в конфігурацію, яку застосунок забирає із сервера під час запуску.
Правка балансу або нова перешкода викочуються як оновлення конфігурації: гравець отримує зміни при наступному вході, перевстановлення й повторна перевірка в магазині застосунків не потрібні.
Конфігурація версіонується, тому невдале оновлення відкочується поверненням попереднього набору параметрів.
Ці чотири механізми знімають основну частину ризиків до старту розробки — решта питань зазвичай стосується строків, команди й порядку приймання.Обговоримо задачу й повернемося з планом робіт
Щоб розмова була предметною, а не про «застосунок-ранер загалом», нам корисно побачити вашу картину до дзвінка. Достатньо того, що вже є: начерк механіки, референси, нотатки щодо монетизації, дані за минулими спробами, якщо вони були.
- Механіка ядра: як задається швидкість, з чого складається рахунок, чи є прискорення з часом і чим закінчується забіг — від цього залежить структура процедурної генерації.
- Референси й антиреференси: 2-3 гри, які подобаються, і 1-2, які точно не підходять, із поясненням чому. Це знімає половину правок на етапі прототипу.
- Цільові платформи й пристрої: на чому запускаємо насамперед і який рівень пристроїв вважаємо нижньою межею — впливає на бюджет продуктивності й на те, де генеруємо рівні: на клієнті чи на сервері.
- Модель монетизації: реклама між забігами, нагорода за перегляд, внутрішньоігрові покупки або їх поєднання. Від цього залежить, як вбудовуються точки показу й що ми виносимо в аналітику.
- Обмеження: жорсткі дати, обов’язкова інтеграція з вашою аналітикою або платежами, вимоги щодо приватності й зберігання даних гравців.
- Хто ухвалює рішення: одна людина чи кілька, і як часто зможете дивитися збірки — від цього залежить ритм ітерацій.
На дзвінку розберемо спірні місця: як балансувати складність, щоб генерація не видавала непрохідні ділянки, де зберігати прогрес і покупки, як рахувати утримання за днями й не збирати зайві персональні дані.
Після цього повернемося з оцінкою проєкту, складом робіт за етапами й планом: прототип ядра, генерація рівнів, метрики й монетизація, полірування, підготовка до публікації. Опишіть задачу в зручному вигляді — текстом, схемою або посиланням на поточний прототип.







