经过结合运用RealityKit或Metal创立的内容和空间,构建全面沉溺式体会。

概述

全面沉溺式体会将人们看到的一切东西替换为你创立的定制内容。你或许运用这种类型的体会来:

  • 供给暂时过渡体会
  • 为你的内容创立无搅扰的空间
  • 完成虚拟现实(VR)游戏
  • 呈现一个可供探索的虚拟世界

在全面沉溺式体会中,你担任屏幕上显现的一切内容。体系躲藏透视视频并显现你供给的内容,仅当手进入视界时才显现用户的手。为了获得最佳性能,运用RealityKit或Metal创立并动画化你的内容。

参阅视频

一般,你会将全面沉溺式体会与其他类型的体会结合运用,并在它们之间供给过渡。当你首先显现一个窗口,然后供给进入你的沉溺式体会的控制时,你给人们准备过渡的时刻。这也给他们供给了一个挑选,假如他们更喜爱运用你运用的窗口,能够跳过体会。

参阅视频

为你的运用的过渡做好准备

给人们对何时进入或退出全面沉溺式体会的控制,并在进入和退出这些体会时供给明晰的过渡。明晰的视觉过渡使得习惯这样的大变化变得更容易。突然的过渡或许会令人感到不适,不愉快,或者让人以为出了什么问题。

在启动时,显现窗口或其他答运用户看到周围环境的内容。向那些内容增加控制以启动到全面沉溺式体会的过渡,并清楚地指出这些控制的功用。在你的体会中,供给明确的控制和说明怎么退出体会。

正告

当你开始一个全面沉溺式体会时,visionOS界说了一个体系鸿沟,该鸿沟从人头部的初始位置向外延伸1.5米。假如他们的头移出了该区域,体系会自动停止沉溺式体会并重新翻开外部视频。这个功用是一个助手,协助防止人们与物体产生磕碰。

翻开沉溺式空间

要创立全面沉溺式体会,翻开一个ImmersiveSpace并将其样式设置为full。沉溺式空间是一种让你在人们周围环境的任何地方放置内容的SwiftUI场景类型。将full样式运用到场景,告知体系躲藏透视视频并只显现你运用的内容。

在你的运用对象的body属性或你办理的任何SwiftUI场景中声明空间。以下示例显现了一个带有主窗口和全面沉溺式空间的运用。在启动时,运用显现窗口。

@main
struct MyImmersiveApp: App {
    var body: some Scene {
        WindowGroup() {
            ContentView()
        }
        // Display a fully immersive space.
        ImmersiveSpace(id: "solarSystem") {
            SolarSystemView()
        }.immersionStyle([.full])
    }
}

要显现一个ImmersiveSpace,运用openImmersiveSpace动作翻开它,该动作能够从SwiftUI环境获取。此动作异步运转,并运用供给的信息查找和初始化你的场景。以下示例显现了一个翻开solarSystem标识符的空间的按钮

Button("Show Solar System") {
    Task {
        let result = await openImmersiveSpace(id: "solarSystem")
        if case .error = result {
            print("An error occurred")
        }
    }
}

一个运用一次只能显现一个空间,当另一个空间可见时,测验翻开一个空间是错误的。要关闭已翻开的空间,请运用dismissImmersiveSpace操作。

运用RealityKit制作你的内容

当你的内容由根本形状或USD文件中的现有内容组成时,RealityKit工作得很好。运用RealityKit实体安排你的场景内容,并运用组件和体系对该内容进行动画处理。运用Reality Composer Pro以可视化方法组装你的内容,并将动态着色器,动画,音频和其他行为附加到你的内容。在你的场景中在RealityView中显现RealityKit场景的内容。

要在运转时加载一个Reality Composer Pro场景,获取你的Reality Composer Pro包文件的URL,并加载你的场景的根实体。以下示例显现了怎么创立坐落运用bundle中的包的实体:

import MyRealityBundle
let url = MyRealityBundle.bundle.url(forResource:
                                     "MyRealityBundle", withExtension: "reality")
let scene = try await Entity(contentsOf: url)

运用Metal制作你的内容

创立全面沉溺式场景的另一种挑选是运用Metal自己制作一切内容。当运用Metal来制作你的内容时,运用Compositor Services结构将该内容放置在屏幕上。Compositor Services供给了你需求设置Metal烘托引擎并开始绘图的代码。

有关怎么运用Metal和Compositor Services烘托内容以及办理与你的内容的交互的详细信息,请参见运用Metal制作全面沉溺式内容。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。