Поделиться через


Настройка перемещения и телепортации аватара

Общие сведения

Чтобы аватары сетки успешно перемещались и телепортироваться в вашем интерфейсе, важно следовать определенным рекомендациям по проектированию. В этой статье содержатся сведения о настройке поверхностей для перемещения и телепортации, советы по ограничениям перемещения аватаров и проектированию коллайдера, а также подробный раздел о слоях.

Руководство по перемещению аватара

Сцена должна иметь коллайдеры для аватара, чтобы ходить и телепортироваться. Как правило, низкополимерный сетчатый коллайдер, который плотно вписывается в визуальную геометрию, даст наилучшие результаты. Box Colliders отлично подходит для тривиальных сценариев, но может привести к некоторым проблемам, таким как зависание аватара на углах или ограничение высоты шага.

Ограничения перемещения аватара сетки:

Максимальный наклон: <45 градусов
Максимальная высота шага: 0,3
Радиус капсулы аватара: 0,3
Высота капсулы аватара: 2
Высота аватара: 1,8

Рекомендации для достижения наилучших результатов:

  • Выравнивание поверхностей столкновения с визуальными поверхностями, по которым будет ходить аватар. Это важно для того, чтобы избежать проблем с положением аватара относительно визуальной поверхности (для предотвращения плавающих или обрезок).

  • Скругленные углы помогают сгладить движение аватара и предотвращают зависание аватара.

  • Чтобы заблокировать перемещение аватара, используйте крутые наклоны или высоту, значительно превышающую максимальную высоту шага.

    • Измените форму коллайдеров, чтобы создать поверхности, которые, естественно, трудно или невозможно пройти для аватара. Например, используйте сетчатый коллайдер с неправильной формой, который не обеспечивает плоскую поверхность или наклон, на который будет стоять аватар.

    • В некоторых случаях может быть достаточно капсульного коллайдера или аналогичной округленной формы на объектах или областях, на которых аватар не должен ходить. Эти фигуры недоступны, если наклон достаточно крутой и приведет к скольжения аватара.

Слои конфликтов

Взаимодействуемые объекты — это Объекты GameObjects с нерабочим коллайдером и соответствующей визуальной геометрией на одном из слоев, сталкивающихся с объектом. Аватары могут ходить и размещаться на объектах с коллайдерами без триггеров, поэтому помните о том, какой слой используется.

Для точного позиционирования и телепортации аватара коллайдеры сцен должны находиться на соответствующих слоях. Аватар локального пользователя будет взаимодействовать с любыми коллайдерами на уровнях, поддерживающих эти взаимодействия, (сталкиваться с ними и идти по ним).

При размещении или телепортации аватара важно, чтобы он сталкивался с объектом ground и постоянно располагался на той же высоте над землей (это называется "заземление"). Если земля не обнаружена, аватар упадет. Это допустимо, если над землей (нет падающих повреждений!), но если аватар находится под "наземным" объектом, аватар может не зарегистрировать столкновение с этим объектом, в результате чего он выпадает из среды и возрождает. Если аватар проникает в землю во время перемещения, он будет заземлен.

Все аватары в сеансе должны быть на согласованной высоте. Положение аватара корректируется, если его высота выходит за пределы диапазона. Пример:

  • Пользователь виртуальной реальности физически входит в и из сидящего или стоящего положения. Движение HMD приводит к тому, что аватар в сцене проникает в землю или стоит гораздо выше по вертикали, чем другие аватары.

  • Плохо настроенный визуальный сценарий телепортирует аватар в положение, в которое они не помещаются или слишком низко по вертикали.

Еще одна причина, по которой это важно, заключается в том, что при обновлении физики аватара, если аватар не заземлен, он будет прыгать в положение в результате столкновения его капсулы с землей и выдворения аватара в новое положение. Это особенно влияет на пользователей HMD, потому что неестественные движения, как это может быть тошнота вызывая.

Слои, с которыми взаимодействует аватар, и могут ходить по:

0 — по умолчанию
2. Игнорировать Raycast
4 — вода (разрешены только триггерные коллайдеры, не проходимые)
14 — GroundCollision (телепортируемый)
18 — TriggerVolume (разрешены только триггерные коллайдеры, недоступные для пошагового использования)
21. IgnoreObjects
26 - Custom26
27 - Custom27
28 . Custom28
29 — IgnoreRealtimeLight
30 - WallCollision

Дополнительные сведения о слоях в проекте сетки.

Поддержка телепортации

Чтобы сцена поддерживала телепортацию, телепортируемые поверхности (например, пол или земля) должны иметь коллайдеры на слое GroundCollision . Существуют и другие пошаговые слои, но только GroundCollision является телепортируемым. Визуальная геометрия не является телепортируемой и не должна находиться на уровне GroundCollision ; На этом уровне могут находиться только коллайдеры. Неправильное или несогласованное наслоение и столкновение могут привести к нежелательным последствиям при телепорте или поиске земли.

Телепортируемая поверхность должна соответствовать следующим условиям:

  • Он должен иметь какой-либо тип нерабочего коллайдера (например, сетчатый коллайдер или бокс-коллайдер).
  • Его слой должен иметь значение GroundCollision.

Будьте осторожны с низкими потолками или туннелями; они потенциально могут повлиять на заземление аватаров и телепортацию. Например, физика аватара или дуга телепорта может пересекаться или взаимодействовать с коллайдером над ними. Высота от земли до крыши для проходимой области должна быть больше, чем высота капсулы аватара 2 м. Над головой аватара должен быть небольшой буфер пространства, особенно если крыша наклона, а не плоская.

Физика движения обеспечивает плавное движение аватара со всеми участниками взаимодействующих коллайдеров и предотвращает проникновение областей, которые слишком малы для столкновения аватаров. Однако изгоев земли столкновение или проблематичная геометрия среды, такая как клиновые фигуры или очень узкие пространства, потенциально могут привести к тому, что аватар или камера проникают в объекты или застряют. Очень важно тщательно протестировать все проходимые и телепортируемые поверхности.

Подробные сведения о слоях

Слои объектов

Если gameObject имеет нерабочий коллайдер, он столкнется с другими объектами, если он находится на одном из слоев объектов.

0 — по умолчанию
2. Игнорировать Raycast
4 — вода (разрешены только коллайдеры триггеров)
14 - GroundCollision
18 — TriggerVolume (разрешены только триггерные коллайдеры)
20 — ObjectCollision
26 - Custom26
27 - Custom27
28 . Custom28
29 — IgnoreRealtimeLight
30 - WallCollision
31 . IgnoreParticipant

Уровень по умолчанию в Unity (не удивительно) называется "По умолчанию", поэтому может потребоваться использовать другой слой, если вы не хотите взаимодействовать с другими объектами. Например, IgnoreParticipant используется для объектов, которые не должны взаимодействовать с аватаром, а IgnoreCollisions — для объектов, которые не должны взаимодействовать ни с чем.

Некоторые важные слои

Default

Если не указано иное, коллайдер будет находиться на уровне по умолчанию . Это доступный для прохода слой, и аватар будет правильно заземлен. Это недопустимый целевой объект телепорта для локального пользователя. Этот слой взаимодействует и сталкивается с другими объектами.

GroundCollision

Допустимыми целевыми объектами телепортирования для локального пользователя являются только коллайдеры на уровне GroundCollision . В противном случае он идентичен уровню По умолчанию .

Визуальная геометрия, не подкрепленная столкновением, недоступна для прохода и не блокирует аватар, поэтому она является неправильной целью телепортирования и не должна находиться на слое GroundCollision .

WallCollision

Слой WallCollision используется для указания стен, через которые аватар не должен проникать, чтобы ограничить аватар в пространстве, доступном для воспроизведения. Пользователи виртуальной реальности могут перемещать свои аватары произвольными способами с движением HMD во время перемещения в помещении и могут физически пройти через виртуальную стену. Аватар будет телепортирован обратно в границы игровой зоны после того, как он прошел заданное расстояние. В противном случае этот слой идентичен уровню по умолчанию .

Определения слоев

Ниже приведен список слоев, определенных идентификатором и именем, включая блокирующую семантику и описание.

  1. Default

    [Аватар/Объект/Блокировка лучей]

    Используется для столкновений и освещения. Аватар может ходить по нему, но не телепортаться на него. По умолчанию для большинства реквизитов. Объекты на уровне по умолчанию получают в реальном времени направленный свет из среды.

  2. TransparentFX

    [Не блокируется]

    Специальная обработка в конвейере отрисовки Unity для прозрачных объектов и объектов специальных эффектов; обеспечивает правильный порядок отрисовки для прозрачности.

  3. IgnoreRaycast

    [Аватар/блокировка объектов]

    Слой с поддержкой столкновений, который не блокирует лучи, такие как неинтерируемые объекты или невидимые стены, которые аватары не могут пройти, но физические объекты могут проходить через (например, перила, которые объекты могут быть переброшены, но аватары не могут прыгать).

  4. Недоступно

  5. Вода

    [Не блокируется]

    Специально для водных поверхностей. Может использоваться для специализированных взаимодействий отрисовки и физики с водой. Не используйте с коллайдерами без триггеров.

  6. Недоступно

  7. Недоступно

  8. Недоступно

  9. Недоступно

  10. Недоступно

  11. Недоступно

  12. Недоступно

  13. Недоступно

  14. Недоступно

  15. GroundCollision

    [Аватар/Объект/Блокировка лучей]

    Используется для проходимых поверхностей столкновения, на которые можно телепортироваться. Примечание. В более ранних версиях набора средств сетки это был уровень NavMesh.

  16. Недоступно

  17. Недоступно

  18. IgnoreCollisions

    [Не блокируется]

    Не взаимодействует ни с чем. Может обрезать среду и другие объекты.

  19. TriggerVolume

    [Не блокируется]

    Слой для объектов, которые не должны зависеть от физики или лучевой передачи и не имеют специального использования в противном случае. Не используйте для объектов с коллайдерами без триггеров.

  20. Недоступно

  21. ObjectCollision

    [Блокировка объектов]

    Слой для столкновения с объектами, но не с аватаром или лучами.

  22. IgnoreObjects

    [Аватар/блокировка Raycast]

    Слой для столкновения с аватаром, но не с объектами.

  23. RaycastOnly

    [Блокировка raycast]

    Слой для объектов, которые блокируют лучи или могут быть выбраны, но не влияют на столкновение аватара или объекта.

  24. Недоступно

  25. Недоступно

  26. Недоступно

  27. Custom26

    [Аватар/Объект/Блокировка лучей]

    Пользовательский уровень, определяемый пользователем.

  28. Custom27

    [Аватар/Объект/Блокировка лучей]

    Пользовательский уровень, определяемый пользователем.

  29. Custom28

    [Аватар/Объект/Блокировка лучей]

    Пользовательский уровень, определяемый пользователем.

  30. IgnoreRealtimeLight

    [Аватар/Объект/Блокировка лучей]

    Укажите, какие арт-объекты в среде не получают направленный свет в реальном времени, например большинство статических объектов (вместо этого используйте испеченное освещение с помощью карты света).

  31. WallCollision

    [Аватар/Объект/Блокировка лучей]

    Столкновение, которое предотвращает обрезку сцены. Если пользователь HMD протыкает голову через стену, он повторно перемещается в ближайшее место в воспроизводимой области.

  32. IgnoreParticipant

    [Блокировка объектов/лучей]

    Объекты, которые блокируют лучи и другие объекты, но не аватары.

Взаимодействия слоев и таблицы

Многоуровневые взаимодействия

Снимок экрана: матрица столкновения слоев.

Таблица слоев

Описание четырех кодов цветов в таблице Слоев ниже.

Таблица с атрибутами всех доступных слоев.