您可以使用 visionOS 场景类型和样式以有趣且引人入胜的方式共享信息。体积和沉浸式空间等功能可让您将交互式虚拟对象放入人们的环境中,或将人们放入虚拟环境中。

Hello World使用这些工具向人们传授地球的知识 - 我们称之为家的星球。该应用程序显示了地球的倾斜如何创造季节,物体在绕地球运行时如何移动,以及地球如何从太空中出现。




该应用程序使用 SwiftUI 来定义其界面,包括 2D 和 3D 元素。为了创建、自定义和管理 3D 模型和效果,它还依赖于 RealityKit 框架和 Reality Composer Pro。

创建应用的入口点

Hello World 使用窗口构造它在启动时显示的场景(结构中出现的第一个场景): WorldApp

WindowGroup("Hello World", id: "modules") {
    Modules()
        .environment(model)
}
.windowStyle(.plain)

与其他平台(例如macOS和iOS)一样,visionOS将窗口组显示为熟悉的窗口。在visionOS中,人们可以在共享空间中调整窗口大小和移动窗口。即使你的应用提供了复杂的 3D 体验,窗口也是应用的绝佳起点,因为它可以让用户轻松进入体验。它也是提供说明或控件的好地方。

使用导航堆栈呈现不同的模块

观看显示文本 Hello World 键入的简短介绍性动画后,定义主场景内容的视图将显示用于探索世界不同方面的选项。此视图包含导航堆栈根目录下的目录: Modules

NavigationStack(path: $model.navigationPath) {
    TableOfContents()
        .navigationDestination(for: Module.self) { module in
            ModuleDetail(module: module)
                .navigationTitle(module.eyebrow)
        }
}
visionOS 导航堆栈具有与其他平台相同的行为。首次出现时,堆栈将显示其根视图。当有人选择嵌入式导航链接时,堆栈将绘制一个新视图,并在工具栏中显示一个后退按钮。当有人点击后退按钮时,堆栈将恢复上一个视图。

当有人根据来自相应链接的初始值设定项的输入激活链接时,上述代码中导航 Destination(for:destination:) 视图修饰符的尾随闭包会显示一个视图: module

NavigationLink(value: module) { /* The link's label. */ }

可能的值来自自定义枚举:moduleModule

enum Module: String, Identifiable, CaseIterable, Equatable {
    case globe, orbit, solar
    // ...
}