RealityKit之创建一个AR应用
使用模板创建 AR 项目
使用 Xcode创建一个 AR 项目时,直接选择Augmented Reality App模板:

接着,项目的配置选择SwiftUI和RealityKit:

项目创建好后,运行项目。注意:RealityKit构建的项目无法直接在预览或者模拟器中查看效果,需要将项目运行在 iPad 或者 iPhone的真实设备上。
默认项目运行情况如下:
初始默认的项目中,通过实现UIViewRepresentable协议来显示一个UIKit中的视图。这个协议必须要是实现两个方法makeUIView和updateUIView,前者用来构建和返回一个 UIView类型的视图;后者根据SwiftUI中的状态变量变化时来更新UIView。
RealityKit 层次结构介绍

上面的图为官方文档中提供的层次结构图。
在RealityKit中,最上层是一个ARView,用来向用户展示一个渲染的 3D 图形。一个ARView都有一个单一的Scene,这是一个Entity集合的容器。在Scene上,我们可以添加一个或者多个AnchorEntity,这个实例可以让 ARView知道如何将内容显示在真实的世界中。对于每一个AnchorEntity,我们可以在上面添加多个和多层次的Entity用来构建场景内容。
现在,我们来看看初始项目中的makeUIView方法,它的实现步骤如下:
- 创建一个ARView实例:
1 | let arView = ARView(frame: .zero) |
- 创建一个ModelEntity的实例,并添加一些基础的材质。这里是创建了一个长宽高均为 0.1m,圆角 0.005m的正方体:
1 | let mesh = MeshResource.generateBox(size: 0.1, cornerRadius: 0.005) |
- 创建一个AnchotEntity实例,并将上面创建ModelEntity添加到这个实例上:
1 | let anchor = AnchorEntity(.plane(.horizontal, classification: .any, minimumBounds: SIMD2<Float>(0.2, 0.2))) |
- 将创建的AnchorEntity实例添加到ARView的Scene上:
1 | arView.scene.anchors.append(anchor) |
- 最后就是返回ARView的实例。
场景追踪和辅助层添加
在一个 AR 的场景中,我们需要对当前的场景变化进行实时的场景追踪,例如识别到水平面后才放置 3D 对象。要想实现场景的追踪,需要用到ARKit,所以我们首先需要导入这个模块:1
import ARKit
然后删除makeUIView中除了ARView实例创建的代码:1
2
3
4
5
6func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
// TODO: 待添加
return arView
}
接着就是在TODO部分实现场景追踪的代码:1
2
3
4let session = arView.session // 获取 ARView中的 session
let config = ARWorldTrackingConfiguration() // 世界追踪配置
config.planeDetection = [.horizontal] // 水平面追踪
session.run(config) // AR的session根据这个配置进行运行
AR 的 session 用来支持视图的渲染,它是ARSession的实例。在RealityKit中会自动创建一个默认的session来管理视图。
如果此时运行项目,它已经能够实时的追踪当前场景中的平面了,为了更加直观的看到这种追踪的效果,可以在ARView中添加一个辅助层视图。1
2
3
4
5
6// 辅助视图
let coachingOverlay = ARCoachingOverlayView()
coachingOverlay.autoresizingMask = [.flexibleWidth, .flexibleHeight]
coachingOverlay.session = session
coachingOverlay.goal = .horizontalPlane // 目标为水平
arView.addSubview(coachingOverlay) // 将赋值视图作为子视图添加到 ARView 上
另外,当 AR 追踪到平面时可以让它显示特征点或者锚点:1
arView.debugOptions = [.showFeaturePoints, .showAnchorOrigins, .showAnchorGeometry]
此时项目运行后的效果如下:
当 AR 场景中识别到水平面之后,就会显示水平面的特征点、一个锚点坐标轴锚点的几何形状。另外我们注意到AR 场景会识别到多个不同的水平面。
从 Reality Composer 中获取.usdz格式的模型
从 iPad 或者 iPhone 的 App Store 中搜索下载Reality Composer这个软件。Reality Composer可以让我们简单快速的构建、调整和模拟一个 AR 场景。
在 Xcode 15.0之前集成了这个工具,但是目前最新版的Xcode 已经移除。
除此之外,还需要下载 **Reality Converter **,它可以帮助我们在 Mac 上查看、自定义以及转换不同格式的 3D 模型。
下载链接:Creation tools for spatial apps - Augmented Reality - Apple Developer
点击放置物体对象
未完待续!!