🌟
【Swift】iOS 18以降のRealityKit【AR】
なにができるようになるのか
iOSアプリでAR(拡張現実)を扱える。
基本コード
import SwiftUI
import RealityKit
struct ContentView : View {
var body: some View {
RealityView {
// モデルを作成
let model = Entity()
let mesh = MeshResource.generateBox(
size: 0.1,
cornerRadius: 0.005
)
let material = SimpleMaterial(
color: .gray,
roughness: 0.15,
isMetallic: true
)
model.components.set(
ModelComponent(
mesh: mesh,
materials: [material]
)
)
model.position = [0, 0.05, 0]
// modelをAnchorEntityに設置
let anchor = AnchorEntity(
.plane(
.horizontal,
classification: .any,
minimumBounds: SIMD2<Float>(0.2, 0.2)
)
)
anchor.addChild(model)
// AnchorEntityをViewに紐づける
$0.(anchor)
$0.camera = .spatialTracking
}
.edgesIgnoringSafeArea(.all)
}
}
主な登場人物
RealityKit
ARに関する開発を行うためのフレームワーク。
関連情報を漁っていると「ARKit」なるものも出てくるが、こちらはRealityKitに含まれている。
- ARKit:ARに関する基本的な操作
- RealityKit:よりリッチなAR開発
RealityView
3Dコンテンツをアプリで表示するためのView。iOS 18〜。
(iOS 17以前向けで開発したい場合はUIKitベースのARView
を使う。)
既成の3Dモデルを使いたい場合
- 3Dモデルを用意してプロジェクトに配置
- USDZファイル(
.usdz
)が相性よし - 普段リソースを入れる
Assets.xcassets
ではなく、プロジェクト全体の方へ格納する
- USDZファイル(
2. ModelEntity(named:)
で呼び出す
import SwiftUI
import RealityKit
struct ContentView : View {
var body: some View {
RealityView {
if let model = try? await ModelEntity(named: "modelName") {
model.scale = [0.002, 0.002, 0.002]
$0.add(model)
}
content.camera = .spatialTracking
}
.edgesIgnoringSafeArea(.all)
}
}
Discussion