Vison 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对各平台的支持

特性/FeatureARCore (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_AttemptUpdatebool尝试更新控制是否尝试更新XR软件。
attemptUpdatebool尝试更新获取或设置是否尝试更新XR软件。
m_MatchFrameRatebool匹配帧率控制是否将Unity的帧率与ARSession的帧率同步。
matchFrameRatebool匹配帧率已过时,用于控制是否匹配帧率。
matchFrameRateEnabledbool匹配帧率启用获取当前是否启用帧率匹配。
matchFrameRateRequestedbool匹配帧率请求获取或设置是否请求匹配帧率。
m_TrackingModeTrackingMode跟踪模式会话的请求跟踪模式。
requestedTrackingModeTrackingMode请求的跟踪模式获取或设置会话的请求跟踪模式。
currentTrackingModeTrackingMode当前跟踪模式获取会话当前使用的跟踪模式。
frameRateint?帧率获取ARSession的帧率。
stateChangedevent状态变更事件ARSession状态变化时触发。
stateARSessionState会话状态获取整个系统的状态。
notTrackingReasonNotTrackingReason未跟踪原因获取AR跟踪丢失的原因。
Resetmethod重置会话重置ARSession,销毁所有可跟踪对象并重置设备跟踪。
SetMatchFrameRateRequestedmethod设置匹配帧率请求设置是否请求匹配帧率。
WarnIfMultipleARSessionsmethod警告多个ARSession如果存在多个活跃的ARSession,则打印警告。
GetSubsystemmethod获取子系统获取当前的XR会话子系统。
CheckAvailabilitymethod检查可用性开始检查当前设备上XR的可用性。
Installmethod安装开始安装AR软件。
OnEnablemethod启用时ARSession被启用时调用,开始检查AR的可用性。
Initializemethod初始化初始化ARSession
StartSubsystemmethod启动子系统启动ARSession子系统。
Awakemethod觉醒时ARSession对象被创建时调用。
Updatemethod更新每次帧更新时调用,更新ARSession状态。
OnApplicationPausemethod应用暂停时当应用程序暂停或恢复时调用。
OnDisablemethod禁用时ARSession被禁用时调用,恢复帧率和垂直同步设置。
OnDestroymethod销毁时ARSession对象被销毁时调用。
UpdateNotTrackingReasonmethod更新未跟踪原因更新未跟踪原因的状态。

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_DimensionsVector3相机的边界框尺寸。定义了相机边界框的大小,用于有界模式下的体积渲染。
m_IsUniformScalebool是否统一缩放。确保相机的尺寸在缩放时保持统一比例。
m_OutputConfigurationVolumeCameraWindowConfiguration输出配置对象。用于自定义相机窗口的配置。
CullingMaskLayerMask剔除掩码。决定哪些层的对象在该体积相机中可见。
OpenWindowOnLoadbool加载时是否打开窗口。控制是否在加载时自动打开相机窗口。
m_BackingCameraGOGameObject用于剔除的辅助相机对象。用于提供剔除信息,以便在模拟中正确渲染场景。
m_BackingCameraCamera辅助相机组件。同上,用于提供剔除信息。
m_PolySpatialLayerIndexint多空间层索引。用于确定相机在哪个层上。
m_WindowOpenbool窗口是否打开。用于跟踪相机窗口的打开状态。
m_WindowFocusedbool窗口是否获得焦点。用于跟踪相机窗口的焦点状态。
m_RequestedWindowOpenStatebool请求的窗口打开状态。用于同步主机和客户端之间的窗口打开请求。
m_IsHostCameraAvailablebool是否有可用的主机相机。标记主机相机信息是否可用。

Properties

名称类型概述作用
WindowConfigurationVolumeCameraWindowConfiguration获取或设置输出配置对象。用于获取或自定义相机窗口的配置。
ResolvedWindowConfigurationVolumeCameraWindowConfiguration获取解析后的窗口配置。用于获取当前使用的窗口配置。
WindowModePolySpatialVolumeCameraMode获取窗口模式。用于获取当前相机的窗口模式(有界或无界)。
OutputDimensionsVector3获取实际的输出尺寸。用于获取相机输出尺寸。
DimensionsVector3定义相机边界框的尺寸。用于获取或设置相机边界框的尺寸。
VolumeSpaceToWorldSpaceMatrixMatrix4x4从体积空间到世界空间的变换矩阵。用于将体积空间中的点转换到世界空间。
WorldSpaceToVolumeSpaceMatrixMatrix4x4从世界空间到体积空间的变换矩阵。用于将世界空间中的点转换到体积空间。
WindowOpenbool窗口是否打开。用于检查相机窗口当前是否打开。
WindowFocusedbool窗口是否获得焦点。用于检查相机窗口当前是否获得焦点。
OnWindowOpenedUnityEvent窗口打开时触发的事件。用于在窗口打开时触发自定义事件。
OnWindowClosedUnityEvent窗口关闭时触发的事件。用于在窗口关闭时触发自定义事件。
OnWindowResizedUnityEvent窗口大小改变时触发的事件。用于在窗口大小改变时触发自定义事件。
OnWindowFocusedUnityEvent窗口获得或失去焦点时触发的事件。用于在窗口焦点状态改变时触发自定义事件。

Methods

名称返回类型概述作用
OpenWindowvoid请求打开窗口以显示相机内容。如果窗口未打开,则打开窗口。
CloseWindowvoid请求关闭窗口。如果窗口已打开,则关闭窗口。
UpdateMatricesvoid更新从世界空间到体积空间以及反向的变换矩阵。用于确保变换矩阵是最新的。
Awakevoid在对象被加载时调用。初始化多空间层索引和打开窗口(如果启用)。
OnEnablevoid在对象启用时调用。创建辅助相机对象并设置其属性。
OnDisablevoid在对象禁用时调用。销毁辅助相机对象。
Updatevoid每帧调用。更新变换矩阵和处理窗口状态变化。
UpdateConfigurationvoid更新有界剔除相机的配置。用于确保剔除相机的配置与体积相机的当前状态一致。
UpdateBoundedCullingCameravoid更新有界模式下的剔除相机。用于设置剔除相机的参数,以便正确渲染场景。
UpdateUnboundedCullingCameravoid更新无界模式下的剔除相机。用于同步主机相机的信息到剔除相机。
UpdateWindowStatevoid更新窗口状态。用于同步窗口的打开、关闭、大小变化和焦点状态。
ValidateDimensionsbool验证给定的尺寸是否有效。用于检查尺寸是否满足要求,避免错误。
OnDrawGizmosSelectedvoid在编辑器中选中对象时绘制 Gizmos。用于在场景视图中可视化相机的边界框。
OnDrawGizmosvoid在编辑器中绘制 Gizmos。用于在场景视图中绘制相机的辅助图标和边界框边缘。

VolumeCameraResizeListener

以下是VolumeCameraResizeListener类中的字段和方法的概述,包括它们的类型、作用和简要描述:

Inspector

Mode参数是VolumeCameraResizeListener类中的一个枚举类型ResizeMode,它决定了当输出窗口的尺寸与预期不匹配时,脚本应该如何调整体积相机的尺寸。这个参数提供了两种不同的处理方式:
ScaleToFit
概述: 此模式下,体积相机的尺寸会被调整,以便内容能够完全适合于提供的输出窗口尺寸中。如果输出窗口的尺寸小于请求的尺寸,内容将会被缩放以适应窗口,但保持其宽高比不变。这可能会导致内容看起来被拉伸或压缩,以填充整个窗口。
作用 使用ScaleToFit模式时,开发者希望内容能够占据整个输出窗口,即使这意味着内容的原始宽高比可能会改变。这种模式适用于那些优先考虑填充整个窗口而不是保持内容原始外观的情况。

MatchWindowSize
概述: 在这种模式下,体积相机的尺寸会被设置为与输出窗口的尺寸完全匹配。这意味着如果操作系统提供的窗口尺寸与请求的尺寸不同,体积相机的尺寸将会改变以匹配实际的窗口尺寸,而不会对内容进行缩放。
作用: 使用MatchWindowSize模式时,开发者希望保持内容的原始尺寸,不进行任何缩放。这确保了内容的宽高比保持不变,但可能会导致窗口的边缘有额外的空间,未被内容填充。

选择哪种模式取决于开发者对于内容显示的具体需求。如果内容需要完全填充窗口,可能会选择ScaleToFit。如果内容需要保持其原始尺寸和宽高比,即使这意味着窗口周围会有未被使用的区域,可能会选择MatchWindowSize。这个参数提供了灵活性,允许开发者根据他们的设计意图和用户体验要求来调整体积相机的行为。

Fields

名称类型概述作用
ModeResizeMode指定调整大小的模式。决定是按输出窗口的尺寸调整内容以适应,还是匹配窗口尺寸。
m_OriginalVolumeCameraDimensionsVector3保存体积相机原始尺寸的变量。用于在调整大小时保持内容的比例和尺寸。

Methods

名称返回类型概述作用
OnEnablevoid当脚本启用时调用。订阅体积相机的窗口打开和调整大小事件。
OnDisablevoid当脚本禁用时调用。移除订阅的事件监听器。
VolumeWindowResizedvoid响应体积相机窗口调整大小事件。根据实际输出窗口的尺寸调整体积相机的尺寸,以适应或匹配窗口。

VolumeCameraResizeListener类用于在Unity VR开发中处理VolumeCamera的尺寸调整。它监听操作系统提供的输出窗口尺寸变化,并根据这些变化调整体积相机的尺寸,以确保内容正确地映射到输出窗口。这个类特别适用于处理VisionOS这样的平台,其中输出窗口的尺寸可能与请求的尺寸不同。通过这种方式,开发者可以确保内容在不同平台上的正确显示,即使面对非预期的窗口尺寸变化。

VisionOSHoverEffect

它是一个标签组件(tag component),用于指示相应的游戏对象(GameObject)应该显示悬停效果。为了使悬停效果正常工作,该游戏对象必须同时拥有一个MeshRenderer组件(用于显示悬停效果)和一个Collider组件(用于射线与对象的相交检测)。

VisionOSHoverEffect类本身不包含任何具体的实现代码,它仅仅作为一个标记存在,可能在其他地方(如事件触发器或悬停效果管理脚本中)被用来识别哪些游戏对象应该响应悬停事件。当用户的视线或射线与这些带有VisionOSHoverEffect标签的游戏对象相交时,可以触发一些视觉效果或交互逻辑,增强用户体验。

参考网站

Unity 2022.3.18版本下载地址
Poly Spatial 支持的 Unity 功能和组件

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值