Messung und Instrumentierung
Augmented Reality Experiences mit Realitykit in Ios
Table of Contents
Einführung in den Aufbau von Augmented Reality Erfahrungen mit RealityKit
Augmented Reality (AR) überlagert digitale Inhalte auf die physische Welt und schafft interaktive Erlebnisse, die Realität mit virtuellen Objekten verbinden. Apples RealityKit-Framework bietet Entwicklern eine leistungsstarke, performante API zum Erstellen von AR-Apps für iOS. Dieser Artikel erweitert die Grundlagen, die Einrichtung, Entity-Komponenten-Architektur, Benutzerinteraktion, Animation, Physik, Zusammenarbeit und Optimierung abdecken. Am Ende haben Sie ein praktisches Verständnis dafür, wie Sie mit Swift und RealityKit polierte AR-Erlebnisse erstellen können.
Erste Schritte: Projekteinrichtung und Anforderungen
Um AR-Apps mit RealityKit zu entwickeln, benötigen Sie Xcode 13 oder höher, ein physisches iOS-Gerät mit einem A9-Chip oder neuer (iPhones SE, 6s und neuer; iPads 5. Generation und neuer) und ein Apple Developer-Konto zum Testen. Der iOS Simulator unterstützt keine Kamera- oder Sensordaten, daher ist das Testen von Geräten unerlässlich.
Erstellen Sie ein neues Xcode-Projekt und wählen Sie die Vorlage Augmented Reality App. Wählen Sie SwiftUI oder UIKit je nach Ihren Wünschen – RealityKit funktioniert nahtlos mit beiden. Die Vorlage bietet ein und eine grundlegende Szeneneinrichtung.
Alternativ können Sie RealityKit manuell zu einem vorhandenen Projekt hinzufügen, indem Sie das Framework importieren:
import RealityKit
import ARKit
Stellen Sie sicher, dass die NSCameraUsageDescription] in Ihrem festgelegt ist – eine benutzerfreundliche Zeichenfolge, die erklärt, warum die App einen Kamerazugriff benötigt.
Weitere Einzelheiten finden Sie in der Dokumentation von Apple RealityKit und ARKit.
Verständnis des Entity-Component-Systems
RealityKit verwendet eine Entity-Component-Architektur, die für die Konstruktion von Szenen von grundlegender Bedeutung ist. Ein ist ein Container, der Komponenten enthält. Komponenten definieren das Verhalten, das Aussehen, die Physik und andere Eigenschaften des Entity. Zum Beispiel definiert ein ein 3D-Netz, ein handhabt Position / Rotation / Skala und ein ermöglicht Physiksimulation.
Dieser modulare Ansatz macht es einfach, komplexe Objekte zu komponieren. Sie erstellen Entitäten, befestigen Komponenten und ordnen sie in einer Hierarchie an. Die Wurzel der Szene ist ein (typischerweise ein ), das virtuelle Inhalte mit einem realen Ort verknüpft, der von ARKit erkannt wird.
Erstellen eines Ankers und Hinzufügen von Inhalten
Der häufigste Anker ist ein ebener Anker, der Inhalte an horizontalen oder vertikalen Oberflächen anbringt.
// Load a USDZ model
guard let model = try? ModelEntity.load(named: "robot") else { return }
// Create an anchor on any horizontal plane
let anchor = AnchorEntity(plane: .horizontal, classification: .any, minimumBounds: [0.2, 0.2])
// Attach the model to the anchor
anchor.addChild(model)
// Add the anchor to the ARView’s scene
arView.scene.addAnchor(anchor)
Sie können auch Anker an bestimmten Weltpositionen mit erstellen oder Inhalte mit oder an erkannte Bilder oder Gesichter anhängen.
Aufbau einer Basic AR Szene mit RealityKit
Über die einfache Modellplatzierung hinaus müssen Sie den AR-View-Lebenszyklus verwalten.
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
arView.session.delegate = self
// Configure session
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal, .vertical]
arView.session.run(config)
loadContent()
}
func loadContent() {
// Create and add anchors
}
}
Für SwiftUI, betten Sie eine , die in die SwiftUI-Hierarchie überbrückt.
User Interaction: Gesten und Hit-Testing
Um Ihre AR-App interaktiv zu gestalten, müssen Sie mit Tippen, Ziehen und Rotationen von Benutzern umgehen. RealityKit bietet Treffertests, um zu ermitteln, welche Entität der Benutzer berührt hat.
Tippen Sie auf Platz oder Interact
Fügen Sie eine zum hinzu.
arView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTap(_:))))
@objc func handleTap(_ sender: UITapGestureRecognizer) {
let location = sender.location(in: arView)
if let entity = arView.entity(at: location) {
// Scale the entity
var transform = entity.transform
transform.scale *= 1.2
entity.move(to: transform, relativeTo: entity.parent, duration: 0.3, timingFunction: .easeInOut)
} else {
// Place a new object at the tapped location
placeObject(at: location)
}
}
func placeObject(at screenPoint: CGPoint) {
let results = arView.raycast(from: screenPoint, allowing: .estimatedPlane, alignment: .any)
guard let result = results.first else { return }
let anchor = AnchorEntity(world: result.worldTransform)
let box = ModelEntity(mesh: .generateBox(size: 0.1), materials: [SimpleMaterial(color: .blue, isMetallic: false)])
anchor.addChild(box)
arView.scene.addAnchor(anchor)
}
Das Strahlenstrahlen gegen die Oberflächen der realen Welt ist zuverlässiger als das Treffertesten von Entitäten, wenn Sie Inhalte in einem Flugzeug platzieren möchten.
Drag and Rotate mit Gesten
Um den Drag zu aktivieren, hänge ein an und aktualisiere die Position des Wesens entlang der Ebene.
let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handlePan(_:)))
arView.addGestureRecognizer(panGesture)
@objc func handlePan(_ sender: UIPanGestureRecognizer) {
let location = sender.location(in: arView)
guard let entity = arView.entity(at: location) else { return }
guard let parent = entity.parent as? HasAnchoring else { return }
// Translate the entity in the anchor’s local plane
let translation = sender.translation(in: arView)
// ... (convert to 3D movement)
}
Für eine robuste Implementierung sollten Sie aus dem RealityKit -Paket oder die Gesteneigenschaft in iOS 16+ verwenden.
Erweiterte Funktionen: Animationen, Physik und Zusammenarbeit
Animationen
RealityKit unterstützt sowohl Skelettanimationen (aus USDZ-Dateien) als auch immobilienbasierte Animationen.
guard let model = try? ModelEntity.load(named: "dancing_character") else { return }
model.playAnimation(model.availableAnimations[0].repeat(duration: .infinity), transitionDuration: 0.5, startsPaused: false)
Sie können auch Transformationen, Opazität oder benutzerdefinierte Parameter mit der zuvor gesehenen Methode animieren.
Physikalische Simulation
Befestigen Sie eine , um Schwerkraft, Kollisionen und Kräfte zu ermöglichen:
let box = ModelEntity(mesh: .generateBox(size: 0.1), materials: [SimpleMaterial(color: .red, isMetallic: false)])
box.position = [0, 0.5, 0] // above a plane
let physicsBody = PhysicsBodyComponent(
massProperties: .default,
material: .generate(staticFriction: 0.8, dynamicFriction: 0.5, restitution: 0.3),
mode: .dynamic
)
box.components.set(physicsBody)
let collision = CollisionComponent(shapes: [.generateBox(size: [0.1, 0.1, 0.1])])
box.components.set(collision)
// Add box to anchor
anchor.addChild(box)
Die Box wird auf das Flugzeug fallen und auf Kollisionen reagieren. Statische Objekte (wie Wände) sollten haben.
Kollaborative AR Sessions
Mit den Collaborative Sessions von ARKit können mehrere Geräte dieselbe AR-Welt teilen.
config.collaborationEnabled = true
arView.session.run(config)
Senden Sie an andere Peers über ein Netzwerk-Framework (z.B. Multipeer Connectivity). Die RealityKit-Szene jedes Geräts bleibt synchronisiert. Dies ist ideal für Multiplayer-Spiele oder geteilte Design-Reviews.
Optimierung der Leistung für reibungslose AR-Erlebnisse
AR-Apps erfordern hohe Frameraten (60 fps), um Reisekrankheit zu vermeiden.
- Verwenden Sie Low-Poly-Modelle und optimierte USDZ-Dateien. Halten Sie die Vertex-Zahl niedrig und verwenden Sie komprimierte Texturen (KTX oder PNG).
- Beschränken Sie die Anzahl der Entitäten in der Szene.
- Minimiere Draw Calls durch Instancing – teile das gleiche Modell über mehrere Entitäten hinweg.
- Passen Sie die Renderqualität mit auf älteren Geräten an.
- Verwenden Sie Modell laden, um das Blockieren des Hauptfadens zu verhindern.
- Verwalte den AR-Sitzungslebenszyklus: rufe auf, wenn die App in den Hintergrund tritt, und führe die Konfiguration erneut im Vordergrund aus.
Detaillierte Anleitung finden Sie in Apples Erstellen einer immersiven AR-Erfahrung und Testen und Beheben von Problemen Ihrer AR-Erfahrung.
Design von intuitiven AR-Schnittstellen
Die Benutzererfahrung in AR unterscheidet sich von herkömmlichen Apps.
- Surface detection feedback: Visualisieren Sie erkannte Ebenen mit einem Raster oder einer Umrisse, damit Benutzer wissen, wo sie Objekte platzieren sollen.
- Gesten sollten sich natürlich anfühlen: Verwenden Sie direkte Manipulation (Tipp, Drag, Pinch) anstelle von abstrakten Kontrollen.
- Bieten Sie visuelle Hinweise: Zeigen Sie interaktive Entitäten oder ein Fadenkreuz, wenn der Benutzer auf eine gültige Ebene zeigt.
- Beleuchtung: RealityKit kann das Licht der realen Welt automatisch schätzen und auf virtuelle Objekte anwenden.
- Test in verschiedenen Umgebungen: Unterschiedliche Beleuchtung, Texturen und Raumgrößen beeinflussen die AR-Tracking.
Debugging und Testen von AR Apps
Testen von realen Geräten ist nicht verhandelbar. Verwenden Sie Xcodes ARKit Debugging Features:
- Ermöglichen Sie es, Feature-Punkte, Weltursprung und Physik-Wireframes anzuzeigen.
- Verwenden Sie Protokolle, um zu sehen, wenn Oberflächen erkannt werden.
- Fügen Sie eine hinzu, um den Tracking-Zustand und Fehler zu überwachen.
- Testen Sie auf mehreren Gerätegenerationen (z. B. iPhone 8 vs. iPhone 14 Pro), um die Leistung zu messen.
Für automatisierte UI-Tests können Sie AR-Daten abspielen, aber manuelle Tests bleiben für die Genauigkeit unerlässlich.
Schlussfolgerung
RealityKit abstrahiert einen Großteil der Komplexität der AR-Entwicklung, aber der Aufbau einer polierten Erfahrung erfordert die Aufmerksamkeit auf Entity-Architektur, Benutzerinteraktion, Leistung und Design. Durch die Kombination der abgedeckten Techniken - von der Szeneneinrichtung und Gestenbehandlung bis hin zu Physik und Zusammenarbeit - können Sie AR-Apps erstellen, die die Benutzer ansprechen und das volle Potenzial der iOS-Hardware nutzen. Bleiben Sie auf dem neuesten Stand mit Apples sich entwickelnden AR-Frameworks und testen Sie immer auf realen Geräten, um eine nahtlose, immersive Erfahrung zu gewährleisten.