You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SwiftUI中异步加载Reality Composer场景?

异步加载RealityKit大场景方案

你的同步加载方式会在初始化视图时直接阻塞主线程加载大模型,很容易导致UI卡顿甚至无响应,完全可以改成异步加载。下面是修改后的代码:

struct DemoView: View {
    @State private var arView = ARView(frame: .zero)
    @State private var scene1: Experience1.Scene1? // 改为可选类型,初始为nil
    @State private var loadError: Error? // 捕获加载错误

    var body: some View {
        ZStack {
            ARViewContainer(arView: $arView, scene1: $scene1)
                .ignoresSafeArea()
            
            VStack {
                if let error = loadError {
                    Text("加载失败: \(error.localizedDescription)")
                        .foregroundColor(.red)
                }
                
                Button("play") {
                    guard let scene = scene1 else { return }
                    scene.notifications.replay.post()
                }
                .disabled(scene1 == nil) // 未加载完成时禁用按钮
            }
        }
        .onAppear {
            // 视图出现时启动异步加载任务
            Task {
                do {
                    scene1 = try await Experience1.loadScene1()
                    loadError = nil
                } catch {
                    loadError = error
                    print("场景加载失败: \(error)")
                }
            }
        }
    }
}

struct ARViewContainer: UIViewRepresentable {
    @Binding var arView: ARView
    @Binding var scene1: Experience1.Scene1?

    func makeUIView(context: Context) -> ARView {
        return arView
    }
    
    func updateUIView(_ uiView: ARView, context: Context) {
        // 场景加载完成后,确保只添加一次到AR视图
        guard let scene = scene1, !uiView.scene.anchors.contains(scene) else { return }
        uiView.scene.anchors.append(scene)
    }
}

关键修改说明:

  • 将scene1改为可选类型,异步加载完成前保持nil,避免阻塞主线程
  • 使用async/await异步加载场景,Xcode自动生成的Experience1类会提供异步版本的loadScene1()方法
  • 通过onAppear启动加载任务,成功后更新场景状态,失败则记录错误
  • 在ARViewContainer的updateUIView中处理场景添加逻辑,避免重复添加
  • 按钮添加禁用状态,防止未加载完成时触发无效操作

内容的提问来源于stack exchange,提问作者kkk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:22:07