Unity 中的焦点

命名空间:UnityEngine.XR.WSA
类型:HolographicSettings

使用焦点向 HoloLens 提供有关如何最好地稳定当前显示的全息影像的提示。

如果要在 Unity 中设置焦点,需要使用 HolographicSettings.SetFocusPointForFrame() 逐帧设置。 如果未为某一帧设置焦点,则使用默认的稳定平面。

注意

默认情况下,新的 Unity 项目设置了“启用深度缓冲区共享”选项。 使用此选项时,在沉浸式桌面头戴显示设备上或在运行 Windows 10 2018 年 4 月更新 (RS4) 或更高版本的 HoloLens 上运行的 Unity 应用将把深度缓冲区提交给 Windows 以自动优化全息影像稳定性,无需应用指定焦点:

  • 在沉浸式桌面头戴显示设备上,这将启用基于深度的逐像素二次投影。
  • 在运行 Windows 10 2018 年 4 月更新或更高版本的 HoloLens 上,这将分析深度缓冲区以自动选择最佳的稳定平面。

这两种方法都应该提供更好的图像质量,而无需由应用显式为每一帧选择焦点。 请注意,如果你确实手动提供了焦点,它将替代上述自动行为,并且通常会降低全息图的稳定性。 一般说来,仅当你的应用在尚未更新到 Windows 10 2018 年 4 月更新的 HoloLens 上运行时,才应指定手动焦点。

示例

有多种方法可设置焦点,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 开发检查点

请参阅