Vision Pro/Unity/Poly Spatial开发笔记整理【二】(初步认识)
Vision Pro的三种展示类型
- Windowed App - 2D Window
- Virtual Reality - Fully Immersive Space
- Mixed Reality - Volume or Immersive Space
AR Foundation脚本功能简述
接下来就是用到的一些脚本的API功能,整理起来方便后面坐功能对API进行查询:
AR Foundation对各平台的支持
特性/Feature | ARCore (Android) | ARKit (iOS) | OpenXR (visionOS) | HoloLens (Meta) | Meta Quest |
---|---|---|---|---|---|
Session | 是 | 是 | 是 | 是 | 是 |
设备跟踪/Device tracking | 是 | 是 | 是 | 是 | 是 |
相机/Camera | 是 | 是 | 否 | 是 | 是 |
平面检测/Plane detection | 是 | 是 | 是 | 是 | 是 |
图像跟踪/Image tracking | 是 | 是 | 是 | 否 | 否 |
对象跟踪/Object tracking | 否 | 是 | 否 | 否 | 否 |
面部跟踪/Face tracking | 是 | 是 | 否 | 否 | 否 |
身体跟踪/Body tracking | 否 | 是 | 否 | 是 | 否 |
点云/Point clouds | 是 | 是 | 是 | 否 | 否 |
射线投射/Raycasts | 是 | 是 | 是 | 是 | 是 |
锚点/Anchors | 是 | 是 | 是 | 是 | 是 |
网格化/Meshing | 否 | 是 | 是 | 否 | 否 |
环境探针/Environment probes | 是 | 是 | 是 | 否 | 否 |
遮挡/Occlusion | 是 | 是 | 否 | 否 | 是 |
Participants | 否 | 是 | 否 | 否 | 否 |
表中的"visionOS"指的是OpenXR的实现,它是一个跨平台的AR和VR标准。
AR Session
这段代码是Unity的ARSession
类,它是AR(增强现实)功能的核心组件,负责控制ARSession
的生命周期和配置选项。ARSession
确保在整个应用程序中只有一个活跃的ARSession
,并且所有ARSession
组件都与同一个会话通信,避免冲突。通过启用或禁用ARSession
,可以启动或停止ARSession
。
Inspector
Attempt Update
当设置为true时,如果设备的XR功能支持但未安装必要的软件,一些平台(如Android)会尝试提示用户安装或更新软件。这个参数允许开发者选择是否希望在ARSession
中尝试进行软件更新。
如果attemptUpdate为true,并且设备上的AR软件未安装或版本过旧,系统会尝试更新软件。如果attemptUpdate为false,即使设备支持AR,没有安装或更新软件也会导致AR功能不可用。
Match Frame Rate
这个参数已经被标记为过时(obsolete),不再推荐使用。它原本用于控制ARSession
是否尝试将Unity的帧率与ARSession
的帧率同步。现在,这个功能被matchFrameRateRequested和matchFrameRateEnabled属性取代。
Tracking Mode
跟踪模式 / Tracking Mode | 描述 / Description | 适用场景 / Suitable Scenarios |
---|---|---|
PositionAndRotation | 提供设备的位置和旋转信息,适用于精确的空间定位。 | 室内导航、游戏、教育应用等。 |
RotationOnly | 仅提供设备的旋转信息,没有位置信息,适用于观看内容时的头部跟踪。 | 观看360度视频、图像浏览等。 |
DontCare | 假设设备保持静止,虚拟内容固定在初始位置,适用于不需要用户移动的场景。 | 展览、展示、信息板等。 |
这些跟踪模式可以通过ARSession
类的requestedTrackingMode
属性在Unity中进行设置。开发者应根据具体的应用需求和目标平台的硬件能力来选择合适的跟踪模式。
Fields/Properties/Methods
成员名称 | 类型 | 概述 | 作用 |
---|---|---|---|
m_AttemptUpdate | bool | 尝试更新 | 控制是否尝试更新XR软件。 |
attemptUpdate | bool | 尝试更新 | 获取或设置是否尝试更新XR软件。 |
m_MatchFrameRate | bool | 匹配帧率 | 控制是否将Unity的帧率与ARSession 的帧率同步。 |
matchFrameRate | bool | 匹配帧率 | 已过时,用于控制是否匹配帧率。 |
matchFrameRateEnabled | bool | 匹配帧率启用 | 获取当前是否启用帧率匹配。 |
matchFrameRateRequested | bool | 匹配帧率请求 | 获取或设置是否请求匹配帧率。 |
m_TrackingMode | TrackingMode | 跟踪模式 | 会话的请求跟踪模式。 |
requestedTrackingMode | TrackingMode | 请求的跟踪模式 | 获取或设置会话的请求跟踪模式。 |
currentTrackingMode | TrackingMode | 当前跟踪模式 | 获取会话当前使用的跟踪模式。 |
frameRate | int? | 帧率 | 获取ARSession 的帧率。 |
stateChanged | event | 状态变更事件 | 当ARSession 状态变化时触发。 |
state | ARSessionState | 会话状态 | 获取整个系统的状态。 |
notTrackingReason | NotTrackingReason | 未跟踪原因 | 获取AR跟踪丢失的原因。 |
Reset | method | 重置会话 | 重置ARSession ,销毁所有可跟踪对象并重置设备跟踪。 |
SetMatchFrameRateRequested | method | 设置匹配帧率请求 | 设置是否请求匹配帧率。 |
WarnIfMultipleARSessions | method | 警告多个ARSession | 如果存在多个活跃的ARSession ,则打印警告。 |
GetSubsystem | method | 获取子系统 | 获取当前的XR会话子系统。 |
CheckAvailability | method | 检查可用性 | 开始检查当前设备上XR的可用性。 |
Install | method | 安装 | 开始安装AR软件。 |
OnEnable | method | 启用时 | 当ARSession 被启用时调用,开始检查AR的可用性。 |
Initialize | method | 初始化 | 初始化ARSession 。 |
StartSubsystem | method | 启动子系统 | 启动ARSession 子系统。 |
Awake | method | 觉醒时 | 当ARSession 对象被创建时调用。 |
Update | method | 更新 | 每次帧更新时调用,更新ARSession 状态。 |
OnApplicationPause | method | 应用暂停时 | 当应用程序暂停或恢复时调用。 |
OnDisable | method | 禁用时 | 当ARSession 被禁用时调用,恢复帧率和垂直同步设置。 |
OnDestroy | method | 销毁时 | 当ARSession 对象被销毁时调用。 |
UpdateNotTrackingReason | method | 更新未跟踪原因 | 更新未跟踪原因的状态。 |
Poly Spatial 脚本功能简述
VolumeCamera
以下是VolumeCamera
类中的字段和方法的概述,包括它们的类型、作用和简要描述:
Inspector
Culling Mask
作用:包含对象:Culling Mask中的每个位代表一个层,如果某一位被设置为1,那么对应层上的对象将被包含在渲染中。
剔除对象:如果某一位被设置为0,那么对应层上的对象将不会被渲染,也不会参与光照、阴影或其他图形计算。
Dimensions
概述: Dimensions定义了体积相机的边界框(Bounding Box)的尺寸。这个边界框是世界空间中的一个有界区域,它决定了哪些场景内容会被渲染到体积相机的输出中。
作用: 在有界模式(Bounded Mode)下,只有位于这个边界框内的对象才会被渲染。尺寸的大小直接影响到渲染内容的范围和比例。如果设置为Vector3.one,则表示相机处于无界模式(Unbounded Mode),此时会渲染所有场景内容。
OpenWindowOnLoad
概述: 这个布尔参数控制着在场景加载时是否自动打开体积相机的窗口。如果设置为true,则在场景加载完成时,体积相机的窗口将自动打开并显示内容。
作用: 这个参数提供了一种方便的方式来自动启动体积相机的输出,无需在代码中手动调用OpenWindow方法。这对于快速预览和测试体积相机的输出非常有用。
VolumeWindowConfiguration
概述: 这个参数是一个引用到VolumeCameraWindowConfiguration对象的引用,该对象包含了自定义体积相机窗口的配置信息,如窗口的模式(有界或无界)、尺寸和其他渲染设置。
作用: 通过这个参数,开发者可以为体积相机创建和指定特定的配置文件,从而控制输出窗口的外观和行为。例如,可以设置窗口的初始位置、大小、是否全屏等。如果没有指定特定的配置对象,则使用默认配置。
Fields
名称 | 类型 | 概述 | 作用 |
---|---|---|---|
m_Dimensions | Vector3 | 相机的边界框尺寸。 | 定义了相机边界框的大小,用于有界模式下的体积渲染。 |
m_IsUniformScale | bool | 是否统一缩放。 | 确保相机的尺寸在缩放时保持统一比例。 |
m_OutputConfiguration | VolumeCameraWindowConfiguration | 输出配置对象。 | 用于自定义相机窗口的配置。 |
CullingMask | LayerMask | 剔除掩码。 | 决定哪些层的对象在该体积相机中可见。 |
OpenWindowOnLoad | bool | 加载时是否打开窗口。 | 控制是否在加载时自动打开相机窗口。 |
m_BackingCameraGO | GameObject | 用于剔除的辅助相机对象。 | 用于提供剔除信息,以便在模拟中正确渲染场景。 |
m_BackingCamera | Camera | 辅助相机组件。 | 同上,用于提供剔除信息。 |
m_PolySpatialLayerIndex | int | 多空间层索引。 | 用于确定相机在哪个层上。 |
m_WindowOpen | bool | 窗口是否打开。 | 用于跟踪相机窗口的打开状态。 |
m_WindowFocused | bool | 窗口是否获得焦点。 | 用于跟踪相机窗口的焦点状态。 |
m_RequestedWindowOpenState | bool | 请求的窗口打开状态。 | 用于同步主机和客户端之间的窗口打开请求。 |
m_IsHostCameraAvailable | bool | 是否有可用的主机相机。 | 标记主机相机信息是否可用。 |
Properties
名称 | 类型 | 概述 | 作用 |
---|---|---|---|
WindowConfiguration | VolumeCameraWindowConfiguration | 获取或设置输出配置对象。 | 用于获取或自定义相机窗口的配置。 |
ResolvedWindowConfiguration | VolumeCameraWindowConfiguration | 获取解析后的窗口配置。 | 用于获取当前使用的窗口配置。 |
WindowMode | PolySpatialVolumeCameraMode | 获取窗口模式。 | 用于获取当前相机的窗口模式(有界或无界)。 |
OutputDimensions | Vector3 | 获取实际的输出尺寸。 | 用于获取相机输出尺寸。 |
Dimensions | Vector3 | 定义相机边界框的尺寸。 | 用于获取或设置相机边界框的尺寸。 |
VolumeSpaceToWorldSpaceMatrix | Matrix4x4 | 从体积空间到世界空间的变换矩阵。 | 用于将体积空间中的点转换到世界空间。 |
WorldSpaceToVolumeSpaceMatrix | Matrix4x4 | 从世界空间到体积空间的变换矩阵。 | 用于将世界空间中的点转换到体积空间。 |
WindowOpen | bool | 窗口是否打开。 | 用于检查相机窗口当前是否打开。 |
WindowFocused | bool | 窗口是否获得焦点。 | 用于检查相机窗口当前是否获得焦点。 |
OnWindowOpened | UnityEvent | 窗口打开时触发的事件。 | 用于在窗口打开时触发自定义事件。 |
OnWindowClosed | UnityEvent | 窗口关闭时触发的事件。 | 用于在窗口关闭时触发自定义事件。 |
OnWindowResized | UnityEvent | 窗口大小改变时触发的事件。 | 用于在窗口大小改变时触发自定义事件。 |
OnWindowFocused | UnityEvent | 窗口获得或失去焦点时触发的事件。 | 用于在窗口焦点状态改变时触发自定义事件。 |
Methods
名称 | 返回类型 | 概述 | 作用 |
---|---|---|---|
OpenWindow | void | 请求打开窗口以显示相机内容。 | 如果窗口未打开,则打开窗口。 |
CloseWindow | void | 请求关闭窗口。 | 如果窗口已打开,则关闭窗口。 |
UpdateMatrices | void | 更新从世界空间到体积空间以及反向的变换矩阵。 | 用于确保变换矩阵是最新的。 |
Awake | void | 在对象被加载时调用。 | 初始化多空间层索引和打开窗口(如果启用)。 |
OnEnable | void | 在对象启用时调用。 | 创建辅助相机对象并设置其属性。 |
OnDisable | void | 在对象禁用时调用。 | 销毁辅助相机对象。 |
Update | void | 每帧调用。 | 更新变换矩阵和处理窗口状态变化。 |
UpdateConfiguration | void | 更新有界剔除相机的配置。 | 用于确保剔除相机的配置与体积相机的当前状态一致。 |
UpdateBoundedCullingCamera | void | 更新有界模式下的剔除相机。 | 用于设置剔除相机的参数,以便正确渲染场景。 |
UpdateUnboundedCullingCamera | void | 更新无界模式下的剔除相机。 | 用于同步主机相机的信息到剔除相机。 |
UpdateWindowState | void | 更新窗口状态。 | 用于同步窗口的打开、关闭、大小变化和焦点状态。 |
ValidateDimensions | bool | 验证给定的尺寸是否有效。 | 用于检查尺寸是否满足要求,避免错误。 |
OnDrawGizmosSelected | void | 在编辑器中选中对象时绘制 Gizmos。 | 用于在场景视图中可视化相机的边界框。 |
OnDrawGizmos | void | 在编辑器中绘制 Gizmos。 | 用于在场景视图中绘制相机的辅助图标和边界框边缘。 |
VolumeCameraResizeListener
以下是VolumeCameraResizeListener
类中的字段和方法的概述,包括它们的类型、作用和简要描述:
Inspector
Mode
参数是VolumeCameraResizeListener
类中的一个枚举类型ResizeMode
,它决定了当输出窗口的尺寸与预期不匹配时,脚本应该如何调整体积相机的尺寸。这个参数提供了两种不同的处理方式:
ScaleToFit
概述: 此模式下,体积相机的尺寸会被调整,以便内容能够完全适合于提供的输出窗口尺寸中。如果输出窗口的尺寸小于请求的尺寸,内容将会被缩放以适应窗口,但保持其宽高比不变。这可能会导致内容看起来被拉伸或压缩,以填充整个窗口。
作用 使用ScaleToFit
模式时,开发者希望内容能够占据整个输出窗口,即使这意味着内容的原始宽高比可能会改变。这种模式适用于那些优先考虑填充整个窗口而不是保持内容原始外观的情况。
MatchWindowSize
概述: 在这种模式下,体积相机的尺寸会被设置为与输出窗口的尺寸完全匹配。这意味着如果操作系统提供的窗口尺寸与请求的尺寸不同,体积相机的尺寸将会改变以匹配实际的窗口尺寸,而不会对内容进行缩放。
作用: 使用MatchWindowSize
模式时,开发者希望保持内容的原始尺寸,不进行任何缩放。这确保了内容的宽高比保持不变,但可能会导致窗口的边缘有额外的空间,未被内容填充。
选择哪种模式取决于开发者对于内容显示的具体需求。如果内容需要完全填充窗口,可能会选择ScaleToFit
。如果内容需要保持其原始尺寸和宽高比,即使这意味着窗口周围会有未被使用的区域,可能会选择MatchWindowSize
。这个参数提供了灵活性,允许开发者根据他们的设计意图和用户体验要求来调整体积相机的行为。
Fields
名称 | 类型 | 概述 | 作用 |
---|---|---|---|
Mode | ResizeMode | 指定调整大小的模式。 | 决定是按输出窗口的尺寸调整内容以适应,还是匹配窗口尺寸。 |
m_OriginalVolumeCameraDimensions | Vector3 | 保存体积相机原始尺寸的变量。 | 用于在调整大小时保持内容的比例和尺寸。 |
Methods
名称 | 返回类型 | 概述 | 作用 |
---|---|---|---|
OnEnable | void | 当脚本启用时调用。 | 订阅体积相机的窗口打开和调整大小事件。 |
OnDisable | void | 当脚本禁用时调用。 | 移除订阅的事件监听器。 |
VolumeWindowResized | void | 响应体积相机窗口调整大小事件。 | 根据实际输出窗口的尺寸调整体积相机的尺寸,以适应或匹配窗口。 |
VolumeCameraResizeListener
类用于在Unity VR开发中处理VolumeCamera
的尺寸调整。它监听操作系统提供的输出窗口尺寸变化,并根据这些变化调整体积相机的尺寸,以确保内容正确地映射到输出窗口。这个类特别适用于处理VisionOS这样的平台,其中输出窗口的尺寸可能与请求的尺寸不同。通过这种方式,开发者可以确保内容在不同平台上的正确显示,即使面对非预期的窗口尺寸变化。
VisionOSHoverEffect
它是一个标签组件(tag component),用于指示相应的游戏对象(GameObject)应该显示悬停效果。为了使悬停效果正常工作,该游戏对象必须同时拥有一个MeshRenderer
组件(用于显示悬停效果)和一个Collider
组件(用于射线与对象的相交检测)。
VisionOSHoverEffect
类本身不包含任何具体的实现代码,它仅仅作为一个标记存在,可能在其他地方(如事件触发器或悬停效果管理脚本中)被用来识别哪些游戏对象应该响应悬停事件。当用户的视线或射线与这些带有VisionOSHoverEffect
标签的游戏对象相交时,可以触发一些视觉效果或交互逻辑,增强用户体验。
参考网站
更多推荐
所有评论(0)