Если коротко:

Гарнитура передаёт физическое смещение головы относительно tracking origin. Корень Pawn отвечает за виртуальное положение, отдельный Scene Component — за playspace offset, Camera остаётся ведомой трекингом, а capsule синхронизируют с горизонтальной позицией головы. Границу получает и показывает XR runtime: приложение может учитывать её размеры, но не должно скрывать или обходить системные предупреждения.

Unreal Engine room scale VR разделяет шаг player внутри playspace и виртуальный перенос Pawn. Camera получает tracked position от runtime: не приравнивайте её каждый кадр к корню Pawn.

Tracking origin и offset

Для стоячей сцены используйте floor-level origin. В VR Template Player Start расположен на полу. OpenXR STAGE тоже привязан к полу и может содержать bounds, но поддерживается не каждым runtime.

Иерархия: Pawn → Scene Component (playspace) → Camera и Motion Controllers. Перемещайте корень Pawn, а playspace хранит offset. Не добавляйте рост одновременно в camera и origin.

Pawn и capsule

Физический шаг двигает HMD внутри Pawn, но capsule за ним не следует. Для collision обновляйте горизонтальную position capsule по проекции HMD, компенсируя сдвиг playspace. Вертикаль оставляйте трекингу, а capsule проверяйте при наклоне и приседании.

Teleport и continuous move должны переносить Pawn, не Camera. Схема: локомоция Unreal Engine.

Граница

GetPlayAreaBounds возвращает размеры зоны, если runtime их предоставляет. Используйте их для размещения контента, но не как collider. Системную boundary нельзя скрывать или отключать: ею управляет гарнитура.

Проверьте recenter, смену границы, отсутствие Stage и Pawn после teleport. Кроссплатформенную основу настройте через OpenXR.

Поделиться:TelegramВКонтакте

Источники

  1. Epic Games — шаблон для гарнитур
  2. Epic Games — Get Play Area Bounds
  3. Khronos — OpenXR reference spaces