Introduksjon til å bygge augmented reality opplevelser med virkelighetKit

Augmented Reality (AR) overlegger digitalt innhold til den fysiske verden, og skaper interaktive opplevelser som blander virkeligheten med virtuelle objekter. Apples virkelighetKit rammeverk gir utviklere et høyt nivå, performant API for å bygge AR-apper til iOS. Denne artikkelen utvider seg på grunnleggende, dekker oppsett, enhet ⁇ komponentarkitektur, brukerinteraksjon, animasjon, fysikk, samarbeid og optimalisering. Til slutt vil du ha en praktisk forståelse av hvordan du lager polert AR-opplevelser ved hjelp av Swift and RealityKit.

Kom i gang: Prosjektoppsett og krav

For å utvikle AR-apper med RealityKit trenger du Xcode 13 eller senere, en fysisk iOS-enhet med en A9-chip eller nyere (iPhones SE, 6s og senere; iPads 5. gen og senere) og en Apple-utviklerkonto for testing. IOS Simulator støtter ikke kamera eller sensordata, så reell-device-testing er viktig.

Opprett et nytt Xcode-prosjekt og velg Augmented Reality App malen. Velg SwiftUI eller UIKit avhengig av din preferanse ⁇ RealityKit fungerer sømløst med begge. Malen gir en og en grunnleggende sceneoppsett.

Alternativt kan du manuelt legge til RealityKit i et eksisterende prosjekt ved å importere rammeverket:

import RealityKit
import ARKit

Sikre at NSCameraUsageDescription er satt i din ] ⁇ en brukervennlig streng som forklarer hvorfor appen trenger kameratilgang.

For mer informasjon, se Apples RealityKit-dokumentasjon] og ]ARKit-dokumentasjon.

Forstå Entitet ⁇ Component System

RealityKit bruker en Entity ⁇ Component arkitektur, som er grunnleggende for å bygge scener. En ] er en beholder som inneholder komponenter. Komponenter definerer oppførsel, utseende, fysikk og andre egenskaper til enheten. For eksempel definerer en en 3D-maske, en håndterer posisjon/rotasjon/skala, og en muliggjør fysikksimulering.

Denne modulære tilnærmingen gjør det enkelt å komponere komplekse objekter. Du oppretter enheter, legger til komponenter og arrangerer dem i et hierarki. Sceneroten er en (vanligvis en ]), som knytter virtuelt innhold til en reell ⁇ verdens plassering oppdaget av ARKit.

Opprette anker og legge til innhold

Det vanligste ankeret er et plananker som fester innhold til horisontale eller vertikale overflater. Her er hvordan du plasserer en 3D-modell på et hvilket som helst gjenkjent plan:

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

Du kan også opprette anker på bestemte verdensposisjoner ved hjelp av eller vedlegge innhold til detekterte bilder eller ansikter ved hjelp av eller ].

Bygge en grunnleggende AR Scene med virkelighetKit

Utover enkel modellplassering må du administrere AR-visnings livssyklusen. I en UIKit-app legger du til en til visningskontrolleren din:

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

For SwiftUI, innlemmet en som broer i SwiftUI hierarkiet.

Brukerinteraksjon: Gester og hit-Testing

For å gjøre AR-appen interaktiv, må du håndtere brukertrykk, dra og rotasjoner. RealityKit gir hit-testing for å identifisere hvilken enhet brukeren rørte.

Trykk på sted eller inngripe

Legg til en til . I gestehåndteringen, ring for å hente enheten under fingeren:

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

Raycasting mot de virkelige - verden overflater er mer pålitelig enn enhets hit-testing når du vil plassere innhold på et fly. Bruk for dette.

Dra og roter med gester

For å aktivere dra, vedlegg en og oppdater enhetens posisjon langs flyet. For rotasjon, bruk en :

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

For en robust implementering, vurdere å bruke fra RealityKits pakke, eller gesteeegenskap i iOS 16+.

Avanserte funksjoner: Animasjoner, fysikk og samarbeid

Animasjoner

RealityKit støtter både skjelettanimasjoner (fra USDZ-filer) og egenskapsbaserte animasjoner. For å utløse en innebygd animasjon på en modell med animasjonsressurser:

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

Du kan også animere transformerer, åpenhet eller tilpassede parametere ved hjelp av metoden sett tidligere. For komplekse sekvenser, bruk eller ].

Fysikksimulering

Feste en for å muliggjøre gravitasjon, kollisjoner og krefter:

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)

Boksen vil falle på flyet og svare på kollisjoner. Statiske objekter (like vegger) bør ha .

Samarbeids-AR-økter

Med ARKits samarbeidsøkter kan flere enheter dele samme AR-verden. Aktiver samarbeid ved å sette sesjonens samarbeidsalternativer:

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

Send til andre jevnaldrende via et nettverksrammeverk (f.eks. multipeer connectivity). Hver enhets virkelighetKit scene forblir synkronisert. Dette er ideelt for flerspillerspill eller delte designanmeldelser.

Optimerer ytelsen for glatte AR-opplevelser

AR-appene krever høye rammepriser (60 fps) for å unngå bevegelsessykdom. Følg disse praksisene:

  • Bruk lavpoly modeller og optimaliserte USDZ-filer. Hold vertex-tallene lave og bruk komprimerte teksturer (KTX eller PNG).
  • Limit antall enheter i scenen. Bruk til å feilsøke tall.
  • Minimer trekksamtaler ved å bruke instancing ⁇ del samme modell på tvers av flere enheter.
  • Bare rendering kvalitet med på eldre enheter.
  • Bruk modell lasting for å hindre blokkering av hovedtråden. Last modeller i en bakgrunnskø og presentere dem når de er klare.
  • Hanter AR-øktens livssyklus: ring når appen går til bakgrunnen, og kjør konfigurasjonen på forgrunnen på nytt.

For detaljert veiledning, se Apples å skape en forkortelsesfull AR-opplevelse og å teste og feilsøke din AR-opplevelse.

Designe intuitive AR grensesnitt

Brukeropplevelsen i AR skiller seg fra tradisjonelle apper. Følg disse prinsippene:

  • Surface deteksjon tilbakemelding: Visualiser detekterte fly med et rutenett eller kontur slik at brukerne vet hvor objektene skal plasseres.
  • Gesturer bør føle seg naturlige: Bruk direkte manipulering (trykk, dra, knip) i stedet for abstrakte kontroller.
  • Beskytt visuelle hint: Marker interaktive enheter eller vis et trådkors når brukeren peker på et gyldig fly.
  • Handlebelysning: RealityKit kan automatisk estimere ekte - verden lys og bruke den på virtuelle objekter. Bruk til å justere intensiteten.
  • Test i ulike miljøer: Forskjellige belysning, teksturer og romstørrelser påvirker AR sporing. Optimer for gjennomsnittlige forhold.

Debugging og testing av AR-apper

Ekte ⁇ device-testing er ikke-forhandlerlig. Bruk Xcodes ARKit Devlusting-funksjoner]:

  • Aktiver for å vise funksjonspunkter, verdens opprinnelse og fysikk wireframes.
  • Bruk logger for å se når overflater er detektert.
  • Legg til en for å overvåke sporingstilstand og feil.
  • Test på flere enhetsgenerasjoner (f.eks. iPhone 8 mot iPhone 14 Pro) for å måle ytelse.

For automatisert UI-testing kan du spotte AR-data, men manuell testing er fortsatt viktig for nøyaktighet.

Konklusjon

RealityKit abstrakter mye av kompleksiteten i AR-utviklingen, men å bygge en polert opplevelse krever oppmerksomhet til enhetsarkitektur, brukerinteraksjon, ytelse og design. Ved å kombinere teknikkene som dekkes ⁇ fra sceneoppsett og gesthåndtering til fysikk og samarbeid ⁇ kan du opprette AR-apper som engasjerer brukere og utnytter det fulle potensialet til iOS-hardware. Hold deg oppdatert med Apples utviklingsrammer og alltid test på ekte enheter for å sikre en sømløs, immersiv opplevelse.