Разработка модулей обучения и туториалов для 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 камеры и направлением на цель.
Последовательность шагов и проверка выполнения
Туториал — это конечный автомат. Каждый шаг — состояние с условием перехода в следующее. В 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.





