Table of Contents
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.