При запуску VR-проєкту на Unity з XR Interaction Toolkit ви стикаєтеся з тим, що взаємодії працюють нестабільно, батч-рейт падає, а об'єкти не захоплюються правильно. Ми, команда сертифікованих інженерів з понад 5 роками досвіду в геймдеві, допомагаємо налаштувати XRIT так, щоб механіки були плавними та продуктивними. Отримайте консультацію з налаштування XRIT — це зекономить до 2 тижнів на етапі інтеграції та знизить витрати на подальші доопрацювання.
Правильний вибір версії XRIT та уникнення прихованих проблем
XRIT 2.x та 3.x — це фактично різні системи. Версія 3.x переписала Input handling з Legacy Input Manager на нову Input System, змінила архітектуру Interactor/Interactable, додала Affordance System для візуальних станів. Якщо проєкт розпочато на 2.5, а документацію читали для 3.0 — частина API просто не існує або працює інакше.
Перед початком налаштування: зафіксуйте версію XRIT у manifest.json, переконайтеся, що Input System Package (com.unity.inputsystem) версії ≥ 1.6, і що XR Plugin Management налаштовано під цільові платформи. Без явного вказання OpenXR Loader або Oculus XR Plugin у XR Plug-in Management багато компонентів XRIT просто не ініціалізуються без зрозумілого повідомлення про помилку.
Чому XR Origin — джерело більшості проблем з позиціонуванням?
Корінь усієї VR-сцени — XR Origin. Неправильне його налаштування — причина 80% проблем з позиціонуванням та масштабом.
Tracking Origin Mode має відповідати типу гри. Floor — для room-scale, гравець стоїть на підлозі, Y=0 це реальна підлога. Device — для stationary, початок координат там, де шолом при старті. Якщо обрати неправильно, аватар гравця опиниться або під підлогою, або в повітрі — і це не баг у геймплейному коді, а одне налаштування в XROrigin.RequestedTrackingOriginMode.
Camera Floor Offset Object — проміжний об'єкт між XR Origin та Camera Offset. Його Y-позиція в Device-режимі задає віртуальну висоту очей (зазвичай 1.5–1.8 м). У Floor-режимі його Y = 0.
Структура ієрархії: XR Origin → Camera Offset → Main Camera (шолом) + LeftHand Controller + RightHand Controller. Додавати ігрові об'єкти безпосередньо в Camera Offset — погана практика: вони будуть рухатися з головою. Елементи, які мають бути у світі — мають бути у світовому просторі, не в дочірніх об'єктах XR Origin.
Як перевірити Attach Transform у три кроки
- Створіть дочірній порожній об'єкт на XRGrabInteractable, розташуйте його в точці хвату (наприклад, рукоять меча).
- Перетягніть цей об'єкт у поле
Attach Transformкомпонента XRGrabInteractable. - Переконайтеся, що при захопленні об'єкт опиняється в правильній позиції відносно контролера. Якщо ні — підкоригуйте локальні координати Attach Transform.
Налаштування XRGrabInteractable під конкретні механіки
Стандартний XRGrabInteractable працює з коробки для простих випадків. Для нестандартних — потрібно розуміти його внутрішню будову.
Movement Type визначає, як об'єкт слідує за рукою:
-
Instantaneous— телепортується до позиції attach point кожен кадр. Немає фізики, немає плавності. Підходить для інтерфейсних елементів. -
Kinematic— Rigidbody переміщується через MovePosition/MoveRotation. Коректно взаємодіє з іншими Rigidbody та колайдерами, але може «проходити» крізь статичні colliders при високій швидкості. -
VelocityTracking— об'єкт отримує velocity, яка тягне його до цільової позиції. Найбільш «фізичний» варіант, найкращий для об'єктів, які можуть бути заблоковані іншими об'єктами. Вимагає тонкого налаштування TrackingSpeed та TrackingRotationSpeed.
Для зброї зазвичай VelocityTracking з TrackingSpeed = 12–15 та окремою обробкою кидка через SelectExited event + Rigidbody.AddForce з розрахунком velocity з історії позицій за останні 5 кадрів (просто current velocity контролера дає неточний кидок).
Attach Transform — критично важливий параметр, який часто не налаштовують. Без явного Attach Transform об'єкт прикріплюється до позиції контролера — це правильно лише якщо хват має бути біля основи. Для меча attach point має бути біля рукояті; для пістолета — біля рукоятки з правильним кутом. Створюємо порожній child-об'єкт з потрібною позицією та ротацією, призначаємо в поле Attach Transform.
Socket Interactor для розміщення об'єктів
XRSocketInteractor — для механік «покласти об'єкт на полицю/у слот». Часті проблеми: об'єкт стрибає при snapping якщо Snap Threshold занадто великий (рекомендуємо 0.1–0.2 м), або snap не відбувається, якщо Interactor Layer Mask не збігається з тегами Interactable. Перевіряємо: на XRSocketInteractor Interaction Layer Mask має включати шари всіх об'єктів, які можна покласти в слот.
Для складних механік (зброя з модулями, головоломки зі складанням) стандартний Socket часто недостатній — пишемо кастомний Interactor з наслідуванням від XRBaseInteractor, перевизначаємо CanHover та CanSelect з додатковими умовами (тип об'єкта, орієнтація, стан).
Ray Interactor для UI та дистанційної взаємодії
XRRayInteractor + XRUIInputModule для взаємодії з World Space Canvas. Типова проблема: ray проходить крізь UI-елементи або спрацьовує на елементи за іншими елементами. Рішення: правильний sorting layer на Canvas та Blocked Physics Raycasts = true на GraphicRaycaster.
Для ігрових об'єктів XRRayInteractor в парі з XRInteractableSnapVolume дає «притягування» променя до центру об'єкта при наближенні — покращує точність взаємодії з дрібними об'єктами без зміни колайдера.
Вибір Interactor залежить від сценарію. XRGrabInteractable дає повний контроль з фізикою, але вимагає тонкого налаштування для нестандартних механік. XRSocketInteractor простий у налаштуванні для слотів, однак гнучкість обмежена. XRRayInteractor зручний для UI, але точність нижча при дистанційній взаємодії.
Що входить у роботу з налаштування XRIT?
Ми надаємо:
- Аналіз існуючої конфігурації XRIT та виявлення вузьких місць
- Налаштування XR Origin під конкретний сценарій використання (room-scale / stationary)
- Конфігурацію XRGrabInteractable, XRSocketInteractor, XRRayInteractor під ваші механіки
- Кастомні Interactors для унікальних механік (наприклад, зброя, головоломки)
- Оптимізацію продуктивності: зниження draw calls на 20–30%, налаштування LOD та culling
- Документацію з налаштувань та навчання команди
- Підтримку на етапі інтеграції
| Етап | Орієнтовні терміни | Орієнтовна вартість |
|---|---|---|
| Базове налаштування XRIT (grab + ray + socket) | 3–5 днів | від 500$ |
| Кастомні Interactor/Interactable під механіки | 1–2 тижні | від 1000$ |
| Повна система взаємодій для гри | 3–6 тижнів | індивідуально |
Вартість розраховується після аналізу ігрових механік та цільових платформ. Правильне налаштування економить до 2 тижнів на етапі інтеграції.
Чому варто довірити налаштування XRIT професіоналам?
Наша команда — сертифіковані інженери з 5+ років досвіду та 20+ успішних VR-проєктів. Наш підхід у 2 рази швидше стандартної конфігурації. Ми використовуємо перевірені практики: фіксовані версії пакетів, правильну ієрархію сцени, налаштування фізичних параметрів. Гарантуємо якість налаштування та підтримку.
Якщо хочете отримати стабільну систему взаємодій — зв'яжіться з нами для консультації. Ми оцінимо ваш проєкт і запропонуємо оптимальну конфігурацію, яка зекономить час та ресурси.
Згідно з документацією XR Interaction Toolkit, правильна ієрархія сцени та налаштування Attach Transform критичні для коректної роботи.






