全面沉浸式体验将人们看到的所有东西替换为你创建的定制内容。你可能使用这种类型的体验来:
在全面沉浸式体验中,你负责屏幕上显示的所有内容。系统隐藏透视视频并显示你提供的内容,仅当手进入视野时才显示用户的手。为了获得最佳性能,使用RealityKit或Metal创建并动画化你的内容。
给人们对何时进入或退出全面沉浸式体验的控制,并在进入和退出这些体验时提供清晰的过渡。清晰的视觉过渡使得适应这样的大变化变得更容易。突然的过渡可能会令人感到不适,不愉快,或者让人认为出了什么问题。
在启动时,显示窗口或其他允许用户看到周围环境的内容。向那些内容添加控制以启动到全面沉浸式体验的过渡,并清楚地指出这些控制的功能。在你的体验中,提供明确的控制和说明如何退出体验。
警告
当你开始一个全面沉浸式体验时,visionOS定义了一个系统边界,该边界从人头部的初始位置向外延伸1.5米。如果他们的头移出了该区域,系统会自动停止沉浸式体验并重新打开外部视频。这个功能是一个助手,帮助防止人们与物体发生碰撞。
要创建全面沉浸式体验,打开一个ImmersiveSpace并将其样式设置为full。沉浸式空间是一种让你在人们周围环境的任何地方放置内容的SwiftUI场景类型。将full样式应用到场景,告诉系统隐藏透视视频并只显示你应用的内容。
@mainstructMyImmersiveApp:App{varbody:someScene{WindowGroup(){ContentView()}//Displayafullyimmersivespace.ImmersiveSpace(id:"solarSystem"){SolarSystemView()}.immersionStyle([.full])}}要显示一个ImmersiveSpace,使用openImmersiveSpace动作打开它,该动作可以从SwiftUI环境获取。此动作异步运行,并使用提供的信息查找和初始化你的场景。以下示例显示了一个打开solarSystem标识符的空间的按钮:
Button("ShowSolarSystem"){Task{letresult=awaitopenImmersiveSpace(id:"solarSystem")ifcase.error=result{print("Anerroroccurred")}}}一个应用一次只能显示一个空间,当另一个空间可见时,尝试打开一个空间是错误的。要关闭已打开的空间,请使用dismissImmersiveSpace操作。
当你的内容由基本形状或USD文件中的现有内容组成时,RealityKit工作得很好。使用RealityKit实体组织你的场景内容,并使用组件和系统对该内容进行动画处理。使用RealityComposerPro以可视化方式组装你的内容,并将动态着色器,动画,音频和其他行为附加到你的内容。在你的场景中在RealityView中显示RealityKit场景的内容。
要在运行时加载一个RealityComposerPro场景,获取你的RealityComposerPro包文件的URL,并加载你的场景的根实体。以下示例显示了如何创建位于应用bundle中的包的实体:
importMyRealityBundleleturl=MyRealityBundle.bundle.url(forResource:"MyRealityBundle",withExtension:"reality")letscene=tryawaitEntity(contentsOf:url)使用Metal绘制你的内容创建全面沉浸式场景的另一种选择是使用Metal自己绘制所有内容。当使用Metal来绘制你的内容时,使用CompositorServices框架将该内容放置在屏幕上。CompositorServices提供了你需要设置Metal渲染引擎并开始绘图的代码。