Inleiding tot het bouwen van Augmented Reality Experiences met RealityKit

Augmented Reality (AR) overlays digital content to the physical world, create interactieve ervaringen die realiteit met virtuele objecten mengen. Apple. RealityKit framework biedt ontwikkelaars een hoog niveau, performant API om AR apps voor iOS te bouwen. Dit artikel breidt zich uit over de basisprincipes, het behandelen van setup, entiteit-component architectuur, gebruikersinteractie, animatie, natuurkunde, samenwerking en optimalisatie. Tegen het einde, heb je een praktisch begrip van hoe gepolijste AR-ervaringen te creëren met behulp van Swift en RealityKit.

Starten: Projectopstelling en vereisten

Om AR-apps te ontwikkelen met RealityKit, heb je Xcode 13 of later nodig, een fysiek iOS-apparaat met een A9-chip of nieuwer (iPhones SE, 6s, en later; iPads 5th gen en later), en een Apple Developer-account voor het testen. De iOS-simulator ondersteunt geen camera- of sensorgegevens, dus real-device testen is essentieel.

Maak een nieuw Xcode project en selecteer de Augmented Reality App sjabloon. Kies SwiftUI of UIKit afhankelijk van uw voorkeur . RealityKit werkt naadloos met beide. Het sjabloon biedt een en een basis scène setup.

Als alternatief kunt u RealityKit handmatig toevoegen aan een bestaand project door het framework te importeren:

import RealityKit
import ARKit

Zorg ervoor dat de NSCameraUsageBeschrijving wordt ingesteld in uw .. een gebruiksvriendelijke string die uitlegt waarom de app cameratoegang nodig heeft.

Zie voor meer details Apple

Inzicht in het systeem van de entiteit/medewerker

RealityKit gebruikt een Entity-Component architectuur, die fundamenteel is voor het bouwen van scènes. Een ] is een container die onderdelen bevat. Componenten definiëren het gedrag, uiterlijk, natuurkunde en andere eigenschappen van de entiteit. Bijvoorbeeld, een definieert een 3D mesh, een ] behandelt positie/rotatie/schaal, en een maakt het mogelijk om natuurkunde te simuleren.

Deze modulaire aanpak maakt het eenvoudig complexe objecten te componeren. Je maakt entiteiten, koppelt componenten aan en arrangeert ze in een hiërarchie. De scène root is een (meestal een ), die virtuele inhoud verbindt met een door ARKit gedetecteerde locatie in de echte wereld.

Een anker aanmaken en inhoud toevoegen

Het meest voorkomende anker is een vlakanker, die inhoud aan horizontale of verticale oppervlakken hecht. Hierin wordt beschreven hoe een 3D-model op een erkend vlak te plaatsen:

// 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)

U kunt ook ankers maken op specifieke wereldposities met behulp van of inhoud koppelen aan gedetecteerde beelden of gezichten met of .

Bouwen van een basis AR-scène met RealityKit

Naast eenvoudige modelplaatsing moet je de AR-view lifecycle beheren. Voeg in een UIKit-app een toe aan je weergavecontroller:

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
 }
}

Voor SwiftUI moet een die in de SwiftUI-hiërarchie overbrugt, worden ingesloten.

Interactie van de gebruiker: gebit en test

Om uw AR-app interactief te maken, moet u de gebruikerstikken, slepen en rotaties verwerken. RealityKit biedt hit-testing om te bepalen welke entiteit de gebruiker aangeraakt heeft.

Tik op Plaats of Interact

Voeg een toe aan de . In de gebarenverwerker, roep op om de entiteit onder de vinger op te halen:

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)
}

Straalvorming tegen de reële oppervlakken is betrouwbaarder dan een entiteit die de inhoud op een vliegtuig wil plaatsen. Gebruik hiervoor .

Sleep en roteer met gestuurde gespen

Om slepen in te schakelen, een aan te sluiten en de positie van de entiteit langs het vlak bij te werken. Voor rotatie, gebruik een :

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)
}

Voor een robuuste implementatie, overwegen uit RealityKit

Geavanceerde functies: Animaties, Natuurkunde en Samenwerking

Animaties

RealityKit ondersteunt zowel skeletanimaties (van USDZ-bestanden) als op eigendom gebaseerde animaties. Om een ingebouwde animatie op een model met animatiebronnen te activeren:

guard let model = try? ModelEntity.load(named: "dancing_character") else { return }
model.playAnimation(model.availableAnimations[0].repeat(duration: .infinity), transitionDuration: 0.5, startsPaused: false)

U kunt ook transformeren, opaciteit, of aangepaste parameters animeren met behulp van de methode die eerder werd gezien. Voor complexe sequenties, gebruik of .

Fysica-imulatie

Bevestig een om zwaartekracht, botsingen en krachten mogelijk te maken:

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)

De doos zal op het vlak vallen en reageren op botsingen. Statische objecten (zoals muren) moeten hebben.

Samenwerkings-AR-sessies

Met ARKit... kunnen meerdere apparaten dezelfde AR wereld delen... en samenwerking inschakelen door de sessies te laten samenwerken.

config.collaborationEnabled = true
arView.session.run(config)

Stuur naar andere collega's via een netwerkframe (bijv. Multipeer Connectiviteit). Elk apparaat . RealityKit scene blijft gesynchroniseerd. Dit is ideaal voor multiplayer games of gedeelde design reviews.

Optimaliseren van prestaties voor Smooth AR-ervaringen

AR apps eisen hoge frame rates (60 fps) om bewegingsziekte te voorkomen. Volg deze praktijken:

  • Gebruik lage-poly modellen en geoptimaliseerde USDZ-bestanden. Houd vertex telt laag en gebruik gecomprimeerde texturen (KTX of PNG).
  • Laat het aantal entiteiten in de scène. Gebruik om debug te debuggen telt.
  • Minimaliseer tekengesprekken door gebruik te maken van instancing
  • Verbeter de renderingskwaliteit met op oudere apparaten.
  • Gebruik modellading om te voorkomen dat de hoofddraad wordt geblokkeerd. Laad modellen in een achtergrondwachtrij en toon ze wanneer ze klaar zijn.
  • Beheer de AR-sessielevenscyclus: bel wanneer de app naar de achtergrond gaat en voer de configuratie opnieuw uit op de voorgrond.

Voor gedetailleerde richtsnoeren, zie Apple

Ontwerpen van intuïtieve AR-interfaces

De gebruikerservaring in AR verschilt van traditionele apps. Volg deze principes:

  • Oppervlaktedetectiefeedback: Visualiseer gedetecteerde vlakken met een raster of omlijning zodat gebruikers weten waar ze objecten moeten plaatsen.
  • Geesten moeten natuurlijk voelen: Gebruik directe manipulatie (tap, sleep, pink) in plaats van abstracte controles.
  • Visuele hints geven: Interactieve entiteiten markeren of een kruishaar tonen wanneer de gebruiker op een geldig vlak wijst.
  • Handle verlichting: RealityKit kan automatisch het echte licht inschatten en toepassen op virtuele objecten. Gebruik om de intensiteit aan te passen.
  • Probeer in verschillende omgevingen: Verschillende verlichting, texturen en ruimtegroottes beïnvloeden AR-tracking. Optimaliseer voor gemiddelde omstandigheden.

Debuggen en testen van AR-apps

Testen met Real-device is niet-onderhandelbaar. Gebruik Xcode

  • Schakel in om functiepunten, wereld oorsprong, en fysica draadframes te tonen.
  • Gebruik logs om te zien wanneer oppervlakken worden gedetecteerd.
  • Voeg een toe om de status en fouten van het trackingsysteem te monitoren.
  • Test op meerdere generatie apparaten (bv. iPhone 8 vs. iPhone 14 Pro) om de prestaties te meten.

Voor geautomatiseerde UI-tests kunt u AR-gegevens bespotten, maar handmatig testen blijft essentieel voor nauwkeurigheid.

Conclusie

RealityKit abstracteert veel van de complexiteit van AR-ontwikkeling, maar het bouwen van een gepolijste ervaring vereist aandacht voor entiteitsarchitectuur, gebruikersinteractie, prestaties en ontwerp. Door de technieken die worden behandeld te combineren van scène setup en gebarenbehandeling tot natuurkunde en samenwerking . U kunt AR-apps creëren die gebruikers betrekken en het volledige potentieel van iOS hardware benutten. Blijf actueel met Apple. Blijft u actief met AR-kaders en test u altijd op echte apparaten om een naadloze, meeslepende ervaring te garanderen.