上一節了解 ECS 背景知識後,要動手寫RealityKit 程式就簡單多了。
RealityKit 有兩種視圖可選,過去通常用 ARView + UIKit,不過本單元一律採用2024年發表的 RealityView (for iOS/iPadOS/macOS),對熟悉 SwiftUI 的人來說,RealityView 更容易上手,而且若考慮未來開發 Vision Pro 軟體,RealityView 也是不二選擇。
先來看 RealityView + SwiftUI 第一個範例程式,只有7行新內容:
// 6-6a RealityView01
// Created by Heman Lu on 2025/01/31.
// Test Environment: iMac 2019 (macOS 15.3) + Swift Playground 4.6
//
import SwiftUI
import RealityKit
struct 空間運算01 : View {
var body: some View {
RealityView { 內容 in
let 球體 = MeshResource.generateSphere(radius: 0.5)
let 材質 = SimpleMaterial(color: .yellow, isMetallic: true)
let 模型 = ModelEntity(mesh: 球體, materials: [材質])
模型.position.z = -1.0
內容.add(模型)
}.realityViewCameraControls(.orbit)
}
}
import PlaygroundSupport
PlaygroundPage.current.setLiveView(空間運算01())
RealityView 本身是個 SwiftUI 視圖,其特殊之處是尾隨的匿名函式(Closure) { } 會帶入一個雙向參數「內容」,一開始是空的內容,之後用「內容.add()」加入3D虛擬物體,便可顯示到螢幕。
要如何用 RealityKit 建構3D模型呢?需要用到三個基本物件:
上面範例程式中,先準備好網格資源 — 由MeshResource.generateSphere() 產出一個球體,以及材質 — 用SimpleMaterial()產出黃色金屬材質,合起來構成模型個體ModelEntity,再加到 RealityView 「內容」中,即可顯示出來。物件關係圖如下:
graph LR
RealityView -->|內容.add()| 模型個體(ModelEntity)
模型個體(ModelEntity) -->|mesh:| 網格資源(MeshResource)
模型個體(ModelEntity) -->|materials:| 基本材質(SimpleMaterial)
最關鍵的一行程式就是模型個體 ModelEntity() 的產出:
// 6-6a
let 模型 = ModelEntity(mesh: 球體, materials: [材質])