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


Параметры World Locking Tools Context и Manager

World Locking Tools Context позволяет настраивать World Locking Tools Manager в Unity Inspector.

Хотя компонент WorldLockingContext предоставляет пользовательский интерфейс для WorldLockingManager, важно понимать, что они не одинаковы, и в некоторых ситуациях может быть важно понимать их взаимоотношения.

Manager является единственным экземпляром класса

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

WorldLockingManager не является объектом Unity — это универсальный класс C#. Его обновление (Update) определяется прокси-компонентом Unity, который является экземпляром частного класса WorldLockingManager.UpdateProxy. В остальном он не зависит от циклов создания, обновления и уничтожения Unity.

Context является компонентом Unity

WorldLockingContext — это компонент Unity, который добавляется в объект в сцене обычным способом. Его поля отображаются в Unity Inspector так же, как и любые другие поля обычных компонентов Unity.

Хотя не является ошибкой использовать несколько активных WorldLockingContexts в одной сцене, это нежелательно, так как поведение будет неопределенным и зависеть от неизвестного порядка загрузки объектов.

Параметры контекста применяются при загрузке WorldLockingContext. В частности, контекст передает свои параметры в World Locking Tools Manager в своем вызове OnEnable и каждый раз, когда его сцена становится активной. Второй метод применяется как часть обратного вызова Unity.SceneManager.activeSceneChanged, только если новая активная сцена является сценой, к которой принадлежит контекст.

Все параметры можно применить из сценария

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

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

/// Get a copy of the current settings
var settings = WorldLockingManager.GetInstance().Settings;
/// Modify the copy
settings.AutoMerge = !settings.AutoMerge;
settings.AutoRefreeze = !settings.AutoRefreeze;
/// Update the current settings to the values in the copy.
WorldLockingManager.GetInstance().Settings = settings;

Аналогично для параметров диагностики.

Обратите внимание, что изменение нескольких параметров одновременно таким образом влечет только затраты на одно перестроение (если требуется).

Приоритет параметров

Правила для параметров, применяемые к WorldLockingManager, очень просты:

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

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

Следует соблюдать осторожность при смешении параметров World Locking Tools Manager из контекстов и параметров из сценариев. Так как контекст всегда применяет свои параметры при загрузке, сценарий, применяемый вручную во время загрузки, в особенности от обратного вызова OnEnable, скорее всего, будет работать в состоянии гонки и с неопределенным поведением.

Доступные параметры

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

Настройка контекста фиксации в мире

Параметры автоматизации

Параметры автоматизации управляют поведением среды выполнения World Locking Tools Manager. Поля, доступные для изменения, и их влияние описаны в классе ManagerSettings. Они сосредоточены на включении или отключении автоматических периодических действий менеджером. Любое отключенное автоматическое действие можно выполнить вручную.

Раздел автоматизации контекста

Параметры связи

Параметры связи используются для явного определения сцены GameObjects, преобразования которой будут использоваться для применения коррекций World Locking Tools.

Раздел связи контекста

Поле Use Existing (Использовать существующие) позволяет задать связанные объекты один раз в сцене с помощью платформы камеры (при значении параметра Use Existing равном false), чтобы они не были переопределены при загрузке последующих сцен содержимого (при значении параметра Use Existing равном false).

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

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

Если требуемые преобразования не заданы, либо оставлены значения NULL, либо для всех контекстов включен параметр Use Existing, система выдает предупреждение и пытается определить наилучший выбор. Рекомендуется, но не обязательно, явно задавать соответствующие преобразования, чтобы системе не пришлось их угадывать.

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

Первый флажок — Apply Adjustment (Применить корректировку) — по умолчанию включен. Это означает, что система применяет вычисленную корректировку камеру к каждому кадру до Adjustment Frame GameObject. Отключение этого параметра является возможностью для продвинутых пользователей. Ее следует использовать только после решения всех других проблем и получения глубокого понимания World Locking Tools. Вкратце, этот параметр сообщает системе, что корректировку камеру не следует применять к камере, но она будет применяться другими средствами. Как правило, используется компонент AlignSubtree, но не обязательно.

Второй флажок для No Pitch And Roll (Без вращения вокруг поперечной и продольной оси) указывает системе обнулить рассчитанное вращение вокруг поперечной и продольной оси в преобразовании из Playspace в пространство, привязанное к миру. (См. обсуждение пространств координат W:T). Это не влияет на вращение, применяемое системой SpacePin, а только на преобразование для коррекции камеры World Locking, вычисленное Frozen World Engine.

Параметры Anchor Management

Параметры Anchor Management (Управление привязками) позволяют выбрать систему отслеживания привязок. Этот выбор в настоящее время выполняется только при запуске, и после выбора его нельзя изменить.

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

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

Следует отметить, что для прохождения теста на создание кромок значение MaxAnchorEdgeLength должно быть больше, чем MinNewAnchorDistance. На практике хорошо подходит, когда MaxAnchorEdgeLength на 10–20% больше MinNewAnchorDistance.

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

Раздел управления привязками контекста

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

Параметры диагностики

Параметры Diagnostics (Диагностика) управляют сбором данных диагностики для анализа поведения и отладки. Обычно для следует оставить значение Use Defaults (Использовать значения по умолчанию), которое, помимо прочего, отключает сбор данных диагностики. Сбор данных диагностики оказывает значительно влияние на производительность, поэтому его следует избегать, если не требуется.

Раздел диагностики контекста

Во время разработки при обнаружении непредвиденного и нежелательного поведения данные диагностики, собираемые при отключении значения Use Defaults и включении DiagnosticsSettings.Enabled, будут включать сбор данных, которые могут быть gjktpys для понимания и исправления этого поведения.

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

Параметры по умолчанию

Параметры Manager и диагностики содержат флажок Use Defaults (Использовать значения по умолчанию). Свойство Use Defaults также доступно из сценария.

Если свойство Use Defaults имеет значение true, используются текущие параметры по умолчанию. Если значения по умолчанию для свойства изменятся в новом выпуске, свойство Use Defaults указывает системе использовать новое значение свойства.

Установка для свойства Use Defaults значения true в любой момент приведет к сбросу всех значений к текущим значениям по умолчанию. Чтобы заблокировать значения в состоянии, соответствующем моментальному снимку значений по умолчанию в заданный момент времени, включите свойство Use Defaults, чтобы сбросить все поля до текущих значений по умолчанию, а затем снимите флажок, чтобы они не менялись при обновлении.

Рекомендуется оставить у параметра Use Defaults значение true, кроме как во время разработки для экспериментов и отладки.

См. также