Table of Contents
Johdanto Building Augmented Reality Experiences with RealityKit
Augmentoitu todellisuus (AR) yhdistää digitaalisen sisällön fyysiseen maailmaan, luo interaktiivisia kokemuksia, jotka yhdistävät todellisuuden virtuaalisiin objekteihin. Apple...TodellisuusKit-kehys tarjoaa kehittäjille korkean tason, performant API:n, joka rakentaa AR-sovelluksia iOS:lle. Tämä artikkeli laajentaa perusasioita, jotka kattavat setup-, entiteetti-komponenttiarkkitehtuurin, käyttäjävuorovaikutuksen, animaation, fysiikan, yhteistyön ja optimoinnin. Loppuun mennessä sinulla on käytännön ymmärrys siitä, miten luoda kiillotettuja AR-kokemuksia Swift- ja RealityKit-toiminnolla.
Aloittaminen: Projektin asetukset ja vaatimukset
Kehittääksesi AR-sovelluksia RealityKit:llä tarvitset Xcode 13:n tai myöhemmin, fyysisen iOS-laitteen, jossa on A9-siru tai uudempi (iPhones SE, 6s ja myöhemmin; iPads 5. gen ja myöhemmin), sekä Apple Developer -tilin testausta varten. iOS-simulaattori ei tue kameraa tai sensoritietoja, joten todellinen laitetestaus on välttämätöntä.
Luo uusi Xcode-projekti ja valitse []Augmentoitu todellisuus App[] -malli. Valitse SwiftUI tai UIKit riippuen mieltymyksestäsi . RealityKit toimii saumattomasti molempien kanssa. Malli tarjoaa ja perus kohtauksen asetukset.
Voit myös lisätä RealityKit-laitteen olemassa olevaan projektiin tuomalla puitteet:
import RealityKit
import ARKit
Varmista, että NSCameraKäyttöKuvaus on asetettu .
Ks. lisätietoja Apple.s TodellisuusKit-dokumentaatio ja ARKit-dokumentaatio.
Yksikön ja konsernin järjestelmän ymmärtäminen
RealityKit käyttää ]Entity-Component[] -arkkitehtuuria, joka on olennaisen tärkeää kohtauksia rakennettaessa. on säiliö, jossa on komponentteja. Komponentit määrittelevät entiteetin käyttäytymisen, ulkonäön, fysiikan ja muut ominaisuudet. Esimerkiksi [ määrittelee 3D-silmän, käsittelee sijaintia/kiertoa/mittakaavaa ja mahdollistaa fysiikan simuloinnin.
Tämä modulaarinen lähestymistapa tekee monimutkaisten kohteiden säveltämisen helpoksi. Luot kokonaisuuksia, liität komponentteja ja järjestät ne hierarkiassa. Kohtaus.Juuri on (tyypillisesti ), joka sitoo virtuaalisen sisällön todelliseen paikkaan, jonka ARKit havaitsi.
Ankkurin luominen ja sisällön lisääminen
Yleisin ankkuri on tasoankkuri, joka kiinnittää sisällön vaaka- tai pystypintoihin. Tässä ankkuri on 3D-mallin sijoittaminen mihin tahansa tunnustettuun tasoon:
// 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)
Voit myös luoda ankkureita tiettyihin maailman asemiin käyttäen tai liittää sisältöä havaittuihin kuviin tai kasvoihin käyttäen tai .
Perus AR-kohtauksen rakentaminen todellisuusKit
Yksinkertaisen mallin lisäksi AR-näkymän elinkaaren hallinta on tarpeen. Uikit-sovelluksessa lisätään näkymän ohjaimeen:
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
}
}
SwiftUI:n osalta upotetaan siltoihin SwiftUI:n hierarkiaan.
Käyttäjän vuorovaikutus: Egtures ja Hit-Testaus
Jotta AR-sovelluksesi olisi interaktiivinen, sinun on käsiteltävä käyttäjähanoja, vedätteitä ja pyörittelyjä. RealityKit tarjoaa hittitestauksen tunnistaaksesi käyttäjän koskettaman yksikön.
Napauta paikkaan tai vuorovaikutukseen
Lisätään kohtaan . Eleen käsittelijän puhelimeen kutsu , jotta kokonaisuus voidaan hakea sormen alle:
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 vastaan real-world pinnat on luotettavampi kuin entiteetti hitti-testaus, kun haluat sijoittaa sisältöä lentokoneeseen. Käytä tähän.
Vedä ja pyöritä egstures-toiminnoilla
Vedä ja päivitä yksikön sijainti koneen vieressä. Pyöritykseen käytetään :
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)
}
Jos kyseessä on luotettava toteutus, harkitse :n käyttämistä RealityKit.s :n paketista tai :n elekiinteistöstä iOS 16+:ssa.
Kehittyneet ominaisuudet: Animaatiot, fysiikka ja yhteistyö
Animaatiot
RealityKit tukee sekä luustoanimaatioita (USDZ-tiedostoista) että kiinteistöpohjaisia animaatioita.
guard let model = try? ModelEntity.load(named: "dancing_character") else { return }
model.playAnimation(model.availableAnimations[0].repeat(duration: .infinity), transitionDuration: 0.5, startsPaused: false)
Voit myös animoida muunnoksia, opasiteettia tai mukautettuja parametreja -menetelmällä, joka on aiemmin nähty. Monimutkaisten sekvenssien osalta käytetään tai .
Fysiikan simulointi
Antakaa , jotta voidaan mahdollistaa painovoima, törmäys ja voimat:
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)
Laatikko putoaa koneeseen ja reagoi törmäyksiin. Staattisten esineiden (kuten seinien) pitäisi olla .
Yhteistyö AR-istuntojen järjestäminen
ARKit.n yhteistyötilaisuuksilla useat laitteet voivat jakaa saman AR-maailman. Yhteistyötä voi tehdä asettamalla istunnon yhteistyövaihtoehdot:
config.collaborationEnabled = true
arView.session.run(config)
Lähetä muille vertaisille verkkokehyksen (esim. Multipeer Connectivity) kautta. Jokainen laite. RealityKit-kohtaus pysyy synkronoituna. Tämä sopii hyvin moninpelien tai yhteisten suunnitteluarviointien tekemiseen.
Optimoidaan suorituskykyä sujuvasti AR-kokemuksiin
AR-sovellukset vaativat korkeita kuvanopeuksia (60 fps) matkapahoinvointien välttämiseksi.
- Käytä matalan poly mallin [] ja optimoituja USDZ-tiedostoja. Pidä huippupiste laskee alhainen ja käytä paineistettuja tekstuureja (KTX tai PNG).
- Limitä tapahtumapaikalla olevien yhteisöjen lukumäärä [. Käytä vianetsintälaskennassa.
- Minimisoi nostopuhelut[ käyttämällä stancing ... jaa sama malli useissa yksiköissä.
- On vain renderointilaatu[], jossa on vanhoilla laitteilla.
- Käytä mallin latausta[], jotta vältytään päälangan tukkimiselta. Lataa mallit taustajonoon ja esitä ne valmiina.
- Hallinta AR-session elinkaarta[]: puhelu , kun sovellus menee taustalle, ja uudelleenkäyttö etualalla.
Ks. yksityiskohtaiset ohjeet Apple.s Creating an Immersive AR experience and ]Testaus ja vianmääritys AR.
Intuitiivisten AR-liittymien suunnittelu
Käyttäjäkokemus AR:ssa eroaa perinteisistä sovelluksista. Noudata näitä periaatteita:
- Pintan havaitseminen palaute[: Visualisoi havaittu lentokoneita ruudukko tai hahmotella niin käyttäjät tietävät, mihin sijoittaa esineitä.
- Ehdot ovat luonnollisia[: Käytä suoraa manipulointia (tap, drag, brick) abstraktien ohjainten sijaan.
- Tuottakaa visuaalisia vihjeitä[]: Korosta interaktiivisia elementtejä tai näytä varjostus, kun käyttäjä osoittaa kelvollisella tasolla.
- Käsivalaistus[: TodellisuusKit voi automaattisesti arvioida reaalimaailman valoa ja soveltaa sitä virtuaalisiin kohteisiin. Käytä voimakkuuden säätöön.
- Testaa eri ympäristöissä[: Erilaiset valaistus, tekstuurit ja huonekoot vaikuttavat AR-seurantaan. Optimoi keskinopeudet.
Vianetsintä ja testaus AR-sovellukset
Reaalilaitteiden testaus ei ole neuvoteltavissa. Käytä Xcode... ARKit vianetsintäominaisuudet[:
- Ota käyttöön näyttämään ominaisuuksia, maailman alkuperää ja fysiikan johtoja.
- Käytä -lokkeja nähdäksesi, milloin pinnat havaitaan.
- Lisätään -koodi seuratakseen seurantatilaa ja virheitä.
- Testi useille laitesukupolville (esim. iPhone 8 vs. iPhone 14 Pro) suorituskyvyn mittaamiseksi.
Automatisoituun UI-testaukseen voit pilkata AR-dataa, mutta manuaalinen testaus on edelleen välttämätöntä tarkkuuden kannalta.
Päätelmät
RealityKit abstraktisti paljon AR-kehityksen monimutkaisuudesta, mutta kiillotetun kokemuksen rakentaminen vaatii huomiota kokonaisuusarkkitehtuuriin, käyttäjien vuorovaikutukseen, suorituskykyyn ja suunnitteluun. Yhdistämällä tekniikoita, jotka on katettu kohtausasettelusta ja elekäsittelystä fysiikkaan ja yhteistyöhön . Voit luoda AR-sovelluksia, jotka sitovat käyttäjiä ja hyödyntävät iOS-laitteiston koko potentiaalia. Pysy ajan Apple. Apple... Kehittyvä AR-kehys ja testaa aina todellisilla laitteilla, jotta varmistetaan saumaton ja immersiivinen kokemus.