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


Сохранение пространственных систем координат

Как правило, преимущества возможностей сохраняемости в World Locking Tools представляют больший интерес, чем сведения об их реализации.

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

World Locking Tools между сеансами

Как определено в другом разделе, замороженное состояние — это все данные, необходимые для возобновления текущего стабильного пространства, привязанного к миру.

Основное назначение сохраняемости World Locking Tools — позволить использовать преимущества работы в предварительном сеансе — сканирования области и согласования виртуального пространства с реальным миром — в последующих сеансах.

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

Сохранение состояния World Locking Tools

Прежде чем можно будет загрузить замороженное состояние, его необходимо сохранить.

Самым простым способом сохранения замороженного состояния является включение автоматического сохранения (AutoSave) в World Locking Tools Manager в Unity Inspector в World Locking Tools Context или во время выполнения с помощью сценария.

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

var settings = WorldLockingManger.GetInstance().Settings;
settings.AutoSave = !settings.AutoSave;
WorldLockingManager.GetInstance().Settings = settings;

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

Функция автоматического сохранения сохранит актуальное состояние путем периодического сохранения текущего состояния в асинхронном режиме.

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

WorldLockingManager.GetInstance().Save();

Так как сохранение выполняется асинхронно, другие попытки вызвать Save(), пока предыдущее сохранение еще выполняется, будут проигнорированы.

Загрузка замороженного состояния

После сохранения замороженного состояния может потребоваться повторная загрузка World Locking Tools в это состояние — либо в последующем сеансе, либо даже позже в том же сеансе.

После сохранении замороженного состояния существует два пути загрузки состояния.

Если установлен флаг автоматической загрузки (AutoLoad) в World Locking Tools Manager, то все предыдущие сохраненные состояния будут загружены во время запуска. Если сохраненного состояния для загрузки нет, ошибка не создается и запуск продолжается, как если бы флаг не был установлен.

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

Однако загрузка может быть инициирована из сценария в любое время с помощью функции Load в World Locking Tools Manager:

WorldLockingManager.GetInstance().Load();

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

Что сохраняется?

Данные, необходимые для повторного создания сопоставления World Locking Tools, т. е. сопоставления виртуального мира с реальным, можно разбить на четыре группы.

  • Пространственные привязки: базовая сеть пространственных привязок, создаваемых и обслуживаемых Anchor Manager в World Locking Tools, предоставляет необходимую привязку к реальному миру. Эти привязки сохраняются с помощью базового механизма хранения платформы.

  • Состояние подсистемы: состояние подсистемы сохраняется, чтобы позволить подсистеме возобновить свое текущее сопоставление. Восстановление этого состояния удаляет такие неопределенности, как первоначальное положение головы в предыдущих сеансах.

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

  • Пространство координат: World Locking Tools сохраняет пространство координат относительно физического мира, сохраняя внутренний граф локальных пространственных привязок.

Что не сохраняется?

Настройки не сохраняются, а World Locking Tools не сохраняет и не восстанавливает отдельные объекты приложения. Сохраняется только состояние. Любые изменения конфигурации приложением — например изменения, внесенные через API WorldLockingManager — при каждом запуске приложения сбрасываются до значений, заданных в Unity Inspector. Если они не заданы в Inspector, для них задаются значения по умолчанию в коде.

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

  1. предоставить пользователю возможность настроить параметр автоматического сохранения (предположительно вместе с другими параметрами приложения);
  2. переслать заданные пользователем значения в WorldLockingManager;
  3. записать значения в файл (предположительно с другими параметрами приложения);
  4. при запуске приложения загрузить сохраненный параметр (если он был сохранен) и переслать его в WorldLockingManager.

См. примечания в WorldLockingContext о проблемах времени при смешении параметров состояния между ресурсами и скриптом.

См. также