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


Точка фокусировки в Unity

Пространство имен: UnityEngine.XR.WSA
Тип: HolographicSettings

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

Если вы хотите задать точку фокуса в Unity, необходимо задать каждый кадр с помощью HolographicSettings.SetFocusPointForFrame(). Если точка фокуса не задана для кадра, используется плоскость стабилизации по умолчанию.

Примечание.

По умолчанию новые проекты Unity имеют параметр "Включить общий доступ к буферу глубины". С помощью этого параметра приложение Unity, работающее на иммерсивной классической гарнитуре или HoloLens под управлением Центра обновления Windows 10 апреля 2018 г. (RS4) или более поздней версии, автоматически отправляет буфер глубины в Windows для автоматической оптимизации стабильности голограмм без указания точки фокуса.

  • На иммерсивной гарнитуре для настольных компьютеров это позволит повторное создание на основе пикселя на основе пикселя.
  • В HoloLens под управлением Обновления Windows 10 апреля 2018 г. или более поздней версии будет анализировать буфер глубины для автоматического выбора оптимальной плоскости стабилизации.

Любой подход должен обеспечить еще лучшее качество изображения без явной работы приложения, чтобы выбрать точку фокуса для каждого кадра. Обратите внимание, что если вы предоставляете точку фокуса вручную, это переопределит автоматическое поведение, описанное выше, и обычно снижает стабильность голограммы. Как правило, следует указать только точку фокуса вручную, если приложение запущено в HoloLens, которое еще не обновлено до Обновления Windows 10 апреля 2018 г.

Пример

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

public GameObject focusedObject;
void Update()
{
    // Normally the normal is best set to be the opposite of the main camera's
    // forward vector.
    // If the content is actually all on a plane (like text), set the normal to
    // the normal of the plane and ensure the user does not pass through the
    // plane.
    var normal = -Camera.main.transform.forward;     
    var position = focusedObject.transform.position;
    UnityEngine.XR.WSA.HolographicSettings.SetFocusPointForFrame(position, normal);
}

Примечание.

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

Следующий этап разработки

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

Или сразу перейдите к развертыванию приложения на устройстве или эмуляторе:

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

См. также