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

如何最简单地实现可展示指定3D模型的iOS AR应用

最简单的iOS AR模型展示应用实现方案

前置准备

  • 优先选择下载该模型的USDZ格式:这是苹果生态原生支持的3D/AR格式,无需额外解析转换,兼容性最好、性能最优。
  • 下载后将USDZ文件直接拖入Xcode项目,勾选「Copy items if needed」并绑定到你的App target即可。

方案1:最简实现(10行代码完成,嵌入AR Quick Look)

无需自行处理3D渲染、手势交互、AR平面放置逻辑,所有查看功能由系统原生提供,默认支持缩放、旋转、平移模型,可一键切换AR/3D预览模式,完全满足查看模型细节的需求。
实现步骤:

  1. 项目引入QuickLook、QuickLookPreview系统框架
  2. 实现数据源逻辑,返回本地USDZ文件的URL即可
    核心代码示例:
import SwiftUI
import QuickLook
import QuickLookPreview

struct ARDisplayView: View {
    @State private var showPreview = false
    // 替换为你实际的USDZ文件名
    let modelPath = Bundle.main.url(forResource: "lymphatic-system", withExtension: "usdz")!
    
    var body: some View {
        Button("查看淋巴系统AR模型") {
            showPreview = true
        }
        .quickLookPreview($showPreview, items: [modelPath])
    }
}

直接编译打包即可生成可用App,所有交互逻辑由系统原生实现,运行稳定且操作符合用户使用习惯。

方案2:支持自定义拓展的RealityKit实现

如果后续需要添加自定义功能(比如点击模型部位显示对应说明),可以使用原生RealityKit框架实现,无需引入第三方依赖:
核心代码示例:

import SwiftUI
import RealityKit
import ARKit

struct CustomARView: View {
    var body: some View {
        RealityView { content in
            // 加载本地USDZ模型
            if let modelEntity = try? await Entity.load(named: "lymphatic-system") {
                // 生成碰撞体,支持手势交互
                modelEntity.generateCollisionShapes(recursive: true)
                content.add(modelEntity)
            }
            // 配置AR平面检测,支持将模型放置在真实平面上
            let arConfig = ARWorldTrackingConfiguration()
            arConfig.planeDetection = [.horizontal, .vertical]
            content.arView.session.run(arConfig)
        }
        // 平移手势
        .gesture(DragGesture().targetedToAnyEntity().onChanged { value in
            value.entity.transform.translation = value.convert(value.translation3D, from: .local, to: value.entity.parent!)
        })
        // 缩放手势
        .gesture(MagnifyGesture().targetedToAnyEntity().onChanged { value in
            value.entity.scale *= Float(value.magnification)
        })
        // 旋转手势
        .gesture(RotateGesture().targetedToAnyEntity().onChanged { value in
            value.entity.transform.rotation *= simd_quatf(angle: Float(value.rotation.radians), axis: [0,1,0])
        })
    }
}

注意事项

  • 需要在项目Info.plist中添加NSCameraUsageDescription权限描述,说明摄像头使用目的为AR模型展示,否则App启动AR功能会崩溃。
  • 如果模型面数过高运行卡顿,可以直接在Xcode中选中USDZ文件,使用内置的模型优化工具降低面数、压缩纹理,提升运行流畅度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 05:06:10