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


Точки привязки

Первое и самое главное, средство World Locking Tools предоставляет стабильную систему координат, привязанную к миру: пространство, привязанное к миру. Это пространство по возможности остается фиксированным относительно физического мира. И объекты в пространстве, привязанном к миру, имеют ряд возможностей, для которых необходима такая стабильная система координат, например сохранение положения относительно других виртуальных объектов, имитацию соблюдения законов физики, кинематики и других методов анимации.

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

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

Упрощенный пример: предположим, что датчик сопоставляет одну привязку с позицией (3, 0, 0), а другую — с позицией (-3, 0, 0). Позже, по мере уточнения данных датчика, устанавливается, что две координаты должны быть (3, 0, 0) и (-2, 0, 0). Очевидно, что нет ни поворота, ни смещения, которые можно применить к камере, чтобы преобразовать расстояние в шесть метров между двумя привязками в смещение величиной пять метров.

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

Но средство World Locking Tools гарантирует, что в пространстве, привязанном к миру, неперемещающиеся объекты в большинстве случаев не будут перемещаться. И на самом деле, любое движение зависит от приложения-владельца.

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

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

Точки привязки — это кодификация этого контракта между World Locking Tools и приложением. Приложение создает и размещает точки привязки с помощью API-интерфейсов World Locking Tools. Когда исправление положения точки привязки определяется операцией повторного сопоставления, приложение получает извещение посредством обратного вызова нового положения в пространстве, привязанном к миру, что сохранит точку привязки в ее старом положении в физическом пространстве.

Ниже перечислены некоторые сценарии, в которых точки привязки для World Locking Tools могут быть решением:

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

Использование точек привязки

Использовать точки привязки довольно просто.

Обязанности клиента

Для каждой нужной точки привязки клиент должен:

  1. Запросить точки привязки у системы. См. CreateAttachmentPoint
  2. Удалить точки привязки, которые больше не нужны. См. ReleaseAttachmentPoint
  3. Сообщить системе начальное положение и перемещение точек привязки. См. CreateAttachmentPoint, MoveAttachmentPoint и TeleportAttachmentPoint
  4. Обработать события повторного сопоставления. См. ниже.

Обязанности World Locking Tools

Средство World Locking Tools будут уведомлять приложение о каждой затронутой точке привязки, когда происходит любое из следующих событий:

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

Эти уведомления проходят через делегаты, которые приложение передает WORLDLOCKINGMANAGER при создании точки привязки.

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

Примеры реализаций

Для точки привязки, которая должна оставаться фиксированной в физическом мире и которой следует скрывать свое содержимое, если ее отслеживание недопустимо, AdjusterFixed реализует AdjustStateDelegate с его элементом HandleAdjustState и AdjustLocationDelegate с элементом HandleAdjustLocation. Аналогичный компонент для перемещения объектов находится в AdjusterMoving.

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

Рекомендуется начать с компонента AdjusterFixed (или очень похожего AdjusterMoving) и изменить обработчики HandleAdjustLocation и HandleAdjustState в соответствии с потребностями ваших приложений.

См. также