Розробка модулів навчання та туторіалів для VR ігр
Туторіал у VR—принципово інша задача, ніж у плоских іграх. Не можна показати текстовий тултип у куту екрана та чекати, поки гравець прочитає. Не можна заморозити час та показати overlay-підказку—руйнує присутність. Гравець дивиться туди, куди хоче, та може фізично відвернутися від елемента навчання. Туторіал повинен слідувати за увагою гравця, а не вимагати уваги до себе.
Головна проблема: просторова увага гравця
У 2D-іграх туторіал живе в HUD. У VR HUD-а нема—спроба прикріпити UI до камери викликає motion sickness. Стандартний підхід—world-space UI на Canvas у режимі World Space, але потребує, щоб гравець дивився на UI.
Рішення: gaze detection + attention proxy. Система туторіала відслідковує, куди дивиться гравець (через OVREyeGaze на Quest Pro з eye tracking, або спрощений headset direction для Quest 2/3). Якщо гравець дивиться в потрібному напрямку—показуємо підказку. Якщо відвернувся—або чекаємо, або переміщуємо підказку у поле зору.
Для Quest 2/3 без eye tracking: апроксимація через headset forward direction + Physics.Raycast() з позиції голови. Не ідеально, але працює для більшості сценаріїв.
Другий механізм—directional indicator: якщо гравець повинен подивитися на об'єкт для отримання підказки, стрілка або світловий промінь вказує в потрібну сторону. Реалізується через Billboard компонент з постійною орієнтацією до камери + розрахунок кута між forward камери та напрямком на мету.
Послідовність кроків та перевірка виконання
Туторіал—це finite state machine. Кожен крок—стан з умовою переходу в наступний. У Unity зручно реалізується ScriptableObject-орієнтованим підходом: кожен TutorialStep—SO з полями: опис, об'єкт-мета, умова завершення (TutorialCondition—абстрактний клас з нащадками GrabCondition, TeleportCondition, LookAtCondition, ButtonPressCondition).
GrabCondition перевіряє, що XRGrabInteractable на конкретному об'єкті перейшов у статус isSelected. LookAtCondition—що кут між forward голови та напрямком на об'єкт менше 25 градусів протягом 1.5 секунди. Імітує «дивитися на об'єкт намірено, а не випадково».
Persistence підказок: якщо гравець завис на одному кроці довше 30 секунд—показуємо додаткову підказку. Якщо довше 60 секунд—більш явну. Не карамо, не блокуємо—просто додаємо контекст.
VR-специфіка: комфорт під час навчання
Нові користувачі у VR часто відчувають дискомфорт—туторіал це посилює, якщо вимагає швидких рухів або нестандартних поз. Кілька правил:
Туторіал не вимагає телепортації та locomotion перші 2 хвилини. Дайте гравцю освоїтися, стоячи на місці з простими взаємодіями руками.
Нема жорстких таймерів. Час на виконання кроку—безліміт або дуже великий. Тривога від таймера + VR = гарантований дискомфорт.
Об'єкти туторіала розташовуються в комфортній зоні взаємодії: 40–70 см від гравця, на висоті плеч/груді. Не над головою, не у полу—це незручно та нереалістично.
Локалізація та голосові підказки
Якщо в туторіалі є голосовий нарратор—аудіопідказки повинні автоматично переривиатися, якщо гравець виконав крок раніше, ніж закінчився текст. AudioSource.Stop() при OnTutorialStepCompleted—базова вимога, інакше гравець чує підказку для вже виконаного дії.
Субтитри для accessibility—world-space TextMeshPro з динамічним позиціюванням відносно позиції голови. Дистанція 1.5–2 метра, нижня частина поля зору.
| Масштаб туторіала | Орієнтовні строки |
|---|---|
| 5–8 кроків, базові механіки | 1–2 тижні |
| Повний туторіал (15–20 кроків, branching) | 3–6 тижнів |
| Туторіал + система навчання з прогресом | 4–8 тижнів |
Вартість визначається після аналізу ігрових механік та вимог до accessibility.





