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 开发检查点。