Проектування ігрових механік пересування в Unity

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

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

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

Відвідати персоналізований сайт
Показано 1 з 1Усі 242 послуг
Проектування ігрових механік пересування в Unity
Складний
від 3 днів до 2 тижнів
Часті запитання

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

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

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

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

Персонаж відривається від землі на півкадру раніше, ніж натиснута кнопка стрибка — і гравець відчуває це як «пластилінове» керування. Саме тут починається наша робота: ми не підбираємо Rigidbody.mass навмання, а формалізуємо відчуття через конкретні числа та архітектурні рішення. За 10+ років у геймдеві ми впровадили системи пересування в більш ніж 50 проєктах — від мобільних платформерів до консольних шутерів. Зв'яжіться з нами — ми налаштуємо чуйне керування за 2–5 днів.

Чому CharacterController підводить у платформерах?

Unity пропонує два шляхи: фізичний Rigidbody + колайдер та кінематичний CharacterController. У платформерах Rigidbody частіше виявляється кращим вибором: він забезпечує точну фізику на рухомих платформах, тоді як CharacterController потребує ручного оброблення. З Rigidbody ви отримуєте в 2 рази менше багів при рухомих об'єктах.

CharacterController.Move() не взаємодіє з фізичним двигуном напряму — персонаж проходить крізь рухомі платформи, якщо не реалізувати кастомний механізм riding. Стандартний isGrounded флаг повертає false на одному кадрі при спуску по схилу — і персонаж починає нескінченно «підстрибувати» через накопичену гравітацію в буфері вертикальної швидкості.

Rigidbody-персонаж стійкіший до фізичних взаємодій, але потребує ручного контролю тертя: без PhysicMaterial з нульовим dynamicFriction на капсулі персонаж застрягає на кутах геометрії. При цьому Rigidbody.AddForce() у режимі ForceMode.VelocityChange веде себе передбачувано лише при fixedDeltaTime 0.02. Якщо ви зміните крок фізики, всі налаштовані відчуття «пливуть». У нас є готовий набір конфігурацій під різні жанри, який гарантує стабільну поведінку при будь-якому фіксованому кроці.

Як ми будуємо архітектуру системи пересування

Добре спроєктована система пересування розділяє три зони відповідальності: введення, стан та фізика/переміщення. Введення читається в Update() і записується в структуру MovementInput. Стани (Idle, Running, Jumping, Falling, Crouching, WallRunning) керуються кінцевим автоматом — зазвичай це кастомний клас поверх MonoBehaviour, а не Animator State Machine, тому що логіка переходів часто нелінійна і зав'язана на ігрові умови. Сам зсув позиції відбувається в FixedUpdate() через Rigidbody.MovePosition() або напряму через velocity.

Для платформерів з повітряним контролем важлива крива airControlCurve: горизонтальне прискорення в повітрі має бути меншим за наземне, але не нульовим. Реалізується через AnimationCurve в ScriptableObject налаштувань персонажа — дизайнер змінює криву в інспекторі, не торкаючись коду. Ми гарантуємо, що ваші дизайнери зможуть налаштовувати параметри без нашої участі.

Як реалізувати повітряний контроль?

Coyote time та jump buffering — обов'язкові компоненти для чуйного керування. Coyote time дозволяє стрибнути через coyoteTimeDuration (зазвичай 0.1–0.15 с) після сходу з платформи. Jump buffering зберігає натискання стрибка на jumpBufferDuration (0.1–0.2 с) і виконує його при першій можливості. Без цих двох механік гравець постійно «промахується» повз стрибок на краю платформи. Змінна висота стрибка — ще одна point: якщо відпустити кнопку стрибка в середині підйому, вертикальна швидкість зрізається до minJumpVelocity. Це реалізується простою перевіркою в Update().

Параметр Рекомендоване значення Опис
Coyote time 0.1–0.15 с Буфер стрибка після сходу з платформи
Jump buffer 0.1–0.2 с Буфер натискання стрибка до його виконання
Air control ratio 0.3–0.5 Відношення горизонтального прискорення в повітрі до наземного
Min jump velocity 2–4 units/s Вертикальна швидкість при відпусканні кнопки стрибка

Що входить в роботу над системою пересування

  1. Аналіз GDD та референсів — виписуємо конкретні числа (швидкість бігу в units/s, висота стрибка, час дешу).
  2. Проєктування MovementSettings ScriptableObject — всі параметри в одному місці, доступні дизайнеру.
  3. Розробка прототипу на примітивах — лише колайдери та логіка для швидкого налаштування feel (1–2 дні).
  4. Інтеграція Animator Controller — підключення Blend Tree для локомоції та фінальних колайдерів.
  5. Тестування граничних кейсів — стрибок в 1-юнітовий отвір, рухомі платформи з обертанням, перехід між NavMesh Surface різних сцен.
  6. Документація та навчання — передаємо проєкт з коментарями та налаштуваннями, проводимо демо для команди.

Таблиця орієнтовних термінів

Масштаб задачі Опис Термін
Базовий 2D/3D персонаж, земля, стрибок, coyote time 2–5 днів
Середній + double jump, dash, wall jump, crouch 1–2 тижні
Розширений + swimming, climbing, ragdoll transition, moving platforms 2–4 тижні
Повна система + procedural footstep IK, lean, network replication 4–8 тижнів

Процес роботи над проєктом

Починаємо з аналізу вашого GDD та референсних ігор — виписуємо конкретні числа з механік. Потім проєктуємо MovementSettings ScriptableObject з усіма параметрами та PlayerMovement MonoBehaviour з задокументованими зонами відповідальності.

Прототип збирається на примітивах без анімацій — лише колайдери та логіка. Це дозволяє намацати feel керування за день-два, не витрачаючи час на інтеграцію з Animator. Після затвердження feel підключаємо Animator Controller з Blend Tree для локомоції та фінальні колайдери по меш-геометрії.

Тестування включає граничні кейси: стрибок в 1-юнітовий отвір, рухомі платформи з обертанням, перехід між NavMesh Surface різних сцен при адитивному завантаженні. Ці ситуації найчастіше виявляють проблеми з детектуванням землі та накопиченням velocity.

Чек-лист типових помилок при проєктуванні пересування
  • Пропущений coyote time — гравець не може стрибнути одразу після сходу з платформи.
  • Відсутність jump buffering — натискання «з'їдаються», якщо персонаж не на землі.
  • Використання isGrounded без SphereCast — false на схилах, нескінченне підстрибування.
  • Ручне обертання разом з NavMeshAgent.updateRotation — тремтіння повороту.
  • Фіксований fixedDeltaTime для всіх платформ — на Android з 30 fps фізика «пливе».
  • Не накладений LayerMask на детектор землі — SphereCast потрапляє в колайдер персонажа.

Наше рішення дозволяє заощадити до 40% часу на налагодження, скорочуючи бюджет проєкту. Замовте розробку системи пересування — ми підберемо архітектуру під ваш проєкт і бюджет. Оцінимо терміни по вашому GDD за 1 робочий день.

Проектування механік: з чого починається чуйне керування

Перш ніж говорити про геймдизайн, зафіксуємо розмежування: геймдизайн — це не «придумати ідею». Придумати може будь-хто. Завдання — спроектувати систему правил, яка виробляє конкретний емоційний та поведінковий результат. Це інженерна дисципліна, тільки замість компілятора — людський мозок.

Перший біль: вам здається, що керування «дубове», а чому — незрозуміло. Найчастіше проблема не в коді, а у відсутності coyote time та jump buffering. Наприклад, у платформерах без coyote time гравець програє 20% спроб через відчуття «нечесної» смерті. Або в лінійному прискоренні, яке не дає відчуття ваги — замінюємо на криву початкового ривка з подальшим загасанням. Ми це виправляємо на етапі прототипу, скорочуючи подальші правки на 40%.

Окрема категорія — економіка. Без попередньої математичної моделі розвал настає через місяць після релізу. Тому ми починаємо з прогресії: лінійна, експоненціальна або поліноміальна. Наприклад, для RPG використовуємо поліном a * n^b з b=2.0, перевіряючи, скільки годин гравець витратить на кожен рівень. Це дає прогнозований час гри і дозволяє уникнути дисбалансу монетизації.

Які послуги з геймдизайну ми пропонуємо?

Повний цикл: від концепту до вивіреного білду. Під ключ — ви отримуєте геймдизайн-документ (GDD), таблиці балансу, прототип ключових механік на Unity/Unreal, і супровід аж до релізу. Гарантія якості — покрокове узгодження на етапі прототипу, щоб уникнути переробок.

Що входить в роботу (deliverables):

  • Документація: GDD, специфікації механік, наративні дерева, API для розробників
  • Таблиці балансу: прогресія, економіка, DPS-калькулятори
  • Прототипи: інтерактивні сцени з core loop (рух, бій, інвентар)
  • Конфігурація в рушії: ScriptableObject, DataTable, анімаційні події
  • Проведення плейтестів та ітерацій за метриками (утримання, монетизація, retention)

Оцініть ваш проект — зв'яжіться для розрахунку термінів. Підхід заснований на методології MDA та досвіді 50+ реалізованих проектів, більше 10 років на ринку. Наші замовники економлять від 2 до 3 тижнів на ітераціях завдяки чіткому процесу.

Як спроектувати бойову систему без помилок?

Бойова система — найдорожча помилка: на перший погляд проста, на ділі — пекло з edge cases. Розберемо melee combat.

Вибір методу hit detection

Hitbox — колайдери на зброї. Просто, але при швидких атаках виникає tunneling: зброя пролітає крізь противника за кадр. Рішення — Physics.CCD (Continuous Collision Detection), але це дорого. Raycast/spherecast — кастуємо промені вздовж траєкторії зброї. Точніше, менше залежить від fps. Ми віддаємо перевагу spherecast для action-ігор. Докладніше про методи — у статті про виявлення зіткнень.

Налаштування вікон атаки

Кожна атака — три фази: Startup, Active, Recovery. Довгий startup створює «важкі» удари. Короткий recovery дає агресивний стиль. В Unity аніматор кидає подію через AnimationEvent, код вмикає/вимикає hitbox. Типові таймінги для рукопашного бою: startup 200–400 мс, active 100–150 мс, recovery 300–500 мс. Зміна startup з 400 на 250 мс змінює відчуття з «важкий» на «середній» — це фіксується в метриках.

Побудова state machine

Персонаж — скінченний автомат. Базові стани: Idle, Moving, Jumping, Attacking, Hurt, Dead. Бізнес-логіку виносимо в C#-код, аніматор відповідає лише за переходи анімацій. Ієрархічні state machine (через Override Animator Controller) дозволяють вкладені підстани, не дублюючи переходи.

Чому математична модель економіки критична?

Економіку «на око» не роблять — виходить розвал через місяць після релізу. Базова прогресія: лінійна (нудно), експоненціальна (XP(n) = base * multiplier^n, multiplier 1.5–2.0), поліноміальна (a * n^b, b 1.5–2.5). Ми будуємо таблиці в Google Sheets за 2–3 дні, перевіряючи, скільки годин гравець витратить на кожен рівень.

Потоки валют

Принцип: кожна валюта — явне джерело (tap) і стік (sink). Приклад двовалютної системи:

М'яка валюта (золото) Тверда валюта (кристали)
Джерело Квести, вороги, щоденні нагороди Покупка, рідкісні досягнення
Стік Витратні матеріали, покращення, будівлі Пропуск часу, рідкісні предмети
Конвертація → кристали: ні → золото: так (однонаправлено)

Однонаправлена конвертація захищає монетизацію. Дисбаланс легко виявити за DPS і TTK: якщо TTK зброї вдвічі нижче за інші — воно стає meta. Ми виявляємо це на етапі прототипу, скорочуючи наступні правки на 40%.

Наратив та левел-дизайн: як навчати без тексту?

Environmental storytelling — розташування об'єктів, звуків, слідів — часто ефективніше за діалоги. Для діалогів використовуємо Ink (інтеграція з Unity). Ink-скрипти читає наративний дизайнер без програміста. Кожен рівень перевіряємо за принципом: гравець повинен зрозуміти механіку дією, а не за підказкою.

Інструменти в процесі

Завдання Інструмент
GDD Notion, Confluence
Баланс Google Sheets (формули, зведені)
Прототипи Unity 2022 LTS, Godot 4
State machine Miro, draw.io
Наратив Ink, Twine
Конфіги ScriptableObject (Unity)
Аналітика Firebase, GameAnalytics

Ітерація та плейтестинг: 2-тижневий цикл

Перший прототип завжди незручний — це норма. Наш цикл: плейтест кожні 2 тижні. Після — список змін з числами: «startup 400 мс → 250 мс». Думки без чисел не приймаються. Фіксуємо відчуття, змінюємо числа, повторюємо. Завдяки цьому середня економія бюджету на етапі ітерацій становить 15–20%.

Зв'яжіться для консультації — ми оцінимо терміни та бюджет вашого проекту. Отримайте прототип core loop за 3 тижні. Сертифіковані фахівці Unity/Unreal гарантують дотримання термінів.