Pengantar untuk Membangun Pengalaman Realitas yang Teramar Augmented dengan RealityKit

Audenmented Reality (AR) melapisi konten digital ke dunia fisik, menciptakan pengalaman interaktif yang mencampurkan realitas dengan objek virtual. Kerangka kerja Apple RealityKit menyediakan pengembang dengan tingkat tinggi, API untuk membangun aplikasi AR untuk iOS. Artikel ini memperluas pada dasar, meliputi penyiapan, entitas ⁇ komentar, interaksi pengguna, animasi, fisika, kolaborasi, dan optimalisasi. Pada akhirnya, Anda akan memiliki pemahaman praktis tentang bagaimana menciptakan pengalaman AR yang dipoles menggunakan Swift dan Reality.

Keistimewa Mulai Dimulai: Pengaturan dan Keperluan Proyek

Untuk mengembangkan aplikasi AR dengan RealityKit, Anda perlu Xcode 13 atau nanti, perangkat iOS fisik dengan chip A9 atau yang lebih baru (iPhones SE, 6s, dan kemudian; iPads 5th gen dan nanti), dan akun Apple Developer untuk pengujian. Simulator iOS tidak mendukung kamera atau data sensor, sehingga pengujian real ⁇ device sangat penting.

Augmented Reality App template. Pilih SwiftUI atau UIKit tergantung pada preferensi Anda ⁇ RealityKit bekerja tanpa pantai dengan keduanya. Templat menyediakan dan setup adegan dasar.

Alternatifnya, Anda dapat menambahkan RealityKit secara manual ke proyek yang ada dengan mengimpor kerangka kerja:

import RealityKit
import ARKit

Expure the NSCameraUsageDescription diatur dalam ⁇ sebuah user ⁇ friendly string menjelaskan mengapa aplikasi membutuhkan akses kamera.

Untuk rincian lebih lanjut, mengacu pada dokumentasi RealityKit Apple dan ARKit dokumentasi.

Memahami Entitas ⁇ Sistem Komponen

Kiat Reality (berguna)[Entity ⁇ Component architecture, yang mendasar untuk menyusun adegan. Suatu adalah sebuah wadah yang memegang komponen. Komponen mendefinisikan perilaku, penampilan, fisika, dan sifat lain dari entitas tersebut. Sebagai contoh, sebuah mendefinisikan sebuah mesh 3D, sebuah menangani posisi/rotasi/skala, dan sebuah memungkinkan simulasi fisika.

Pendekatan modular ini membuatnya mudah untuk menyusun objek kompleks. Anda menciptakan entitas, melampirkan komponen, dan mengaturnya dalam sebuah hierarki. Akar adegan adalah sebuah (biasanya sebuah ), yang menghubungkan konten virtual dengan lokasi dunia nyata yang dideteksi oleh ARKit.

Cobekan Sebuah Penambat dan Penambahan Kandungan

Hal ini adalah bagaimana menempatkan model 3D pada pesawat yang dikenali:

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

ifford Anda juga dapat membuat jangkar pada posisi dunia tertentu menggunakan atau melampirkan konten untuk mendeteksi gambar atau wajah menggunakan atau .

Gedung venue auditorium dengan RealityKit

Di luar model penempatan sederhana, Anda perlu mengelola lifecycle tampilan AR. Di aplikasi UIKit, tambahkan ke pengatur tampilan Anda:

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

Untuk SwiftUI, membenamkan sebuah yang menjembatani ke dalam hierarki SwiftUI.

Interaksi Pengguna: Gerak Gestur dan Hit ⁇ Pengujian

Untuk membuat aplikasi AR Anda interaktif, Anda perlu menangani ketukan pengguna, seret, dan putar. RealityKit menyediakan hit ⁇ testing untuk mengidentifikasi entitas mana yang disentuh pengguna.

Klak Ke Tempat atau Interaksi

Add a to the . Dalam handler gesture, call untuk mengambil kembali entitas di bawah finger:

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

¡Aquino Raycasting terhadap permukaan dunia nyata ⁇ lebih dapat diandalkan daripada entitas hit ⁇ mencoba ketika Anda ingin menempatkan konten di pesawat. Gunakan untuk ini.

Buat Seret dan Putar dengan Gerak Isyarat

Untuk mengaktifkan drag, lampirkan sebuah dan update posisi entitas di sepanjang pesawat. Untuk rotasi, gunakan sebuah :

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

¡untuk implementasi yang kuat, pertimbangkan menggunakan dari paket milik RealityKit, atau milik isyarat di iOS 16+.

Fitur - Fitur Lanjutan Ke - Kelanjutan: Animasi, Fisika, dan Kolaborasi

Animasi

Civic RealityKit mendukung kedua animasi skeletal (dari berkas USDZ) dan properti ⁇ berdasarkan animasi.Untuk memicu animasi bawaan ⁇ dalam model dengan sumber daya animasi:

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

Anda juga dapat animasikan transformasi, kelegapan, atau parameter kebiasaan menggunakan metode yang dilihat sebelumnya. Untuk urutan kompleks, gunakan atau .

Simulasi Fisika Fisika Fisika Fisika

Lulaq Lampir a untuk mengaktifkan gravitasi, tabrakan, dan gaya:

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)

Kotak tu akan jatuh ke pesawat dan merespon tabrakan. objek static (seperti dinding) seharusnya memiliki .

Sesi - Sesi AR yang Kolaboratif

Dengan sesi kolaborasi ARKit, berbagai perangkat dapat berbagi dunia AR yang sama. Aktifkan kolaborasi dengan menetapkan pilihan kolaborasi sesi:

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

¡Cyribe Send ke peer lain melalui kerangka kerja jaringan (misalnya, Multipeer Connectivity). Setiap adegan RealityKit perangkat tetap disinkronkan. Ini sangat cocok untuk permainan multipemain atau ulasan desain bersama.

Mengoptimumkan Prestasi untuk Pengalaman AR yang Licin

Aplikasi AR ÁA meminta tarif bingkai tinggi (60 fps) untuk menghindari penyakit gerak.

  • [[EfolsonFLT:0]]Gunakan model low ⁇ poli dan optimasi berkas USDZ. Tetap hitung vertex rendah dan gunakan tekstur termampat (KTX atau PNG).
  • [[Eflat:0]]Hadkan jumlah entitas[ dalam adegan. Gunakan untuk menghitung debug.
  • [[GANDAFLT:0]]Minimize draw calls dengan menggunakan instancing ⁇ berbagi model yang sama di seluruh entitas multiple.
  • [[Efol dengan pada perangkat yang lebih tua.
  • [[Efolban:0]]Use model loading untuk mencegah pemblokiran benang utama. Muat model di antrian latar belakang dan hadirkan mereka ketika siap.
  • HANOLLAT:0]]Manage lifecycycycle sesi AR: panggilan ketika aplikasi pergi ke latar belakang, dan menjalankan ulang konfigurasi di latar depan.

Untuk panduan terperinci, lihat Creating an Immersive AR Experience dan Uji dan Troubleshooting Your AR Experience].

Desain Desain Desain Desain Infuit AR Antarmuka

Pengalaman pengguna di AR berbeda dengan aplikasi tradisional.

  • [[OGNOFLT:0]]Surrface deteksi umpan balik[: Visualize mendeteksi pesawat dengan grid atau garis luar sehingga pengguna tahu di mana letak objek.
  • [[Eflat:0]]Gestures seharusnya merasa natural: Gunakan manipulasi langsung (tap, drag, cubit) daripada kontrol abstrak.
  • Petua visual provide: Tonjolkan entitas interaktif atau menunjukkan rerambut silang ketika pengguna menunjuk pada pesawat yang valid.
  • [5] toolnameFLT:0]]Handle lightlight: RealityKit dapat secara otomatis memperkirakan cahaya nyata ⁇ dunia dan menerapkannya ke objek virtual. Gunakan untuk menyesuaikan intensitas.
  • [[EfleksifLT:0]]Uji di berbagai lingkungan: Pencahayaan, tekstur, dan ukuran ruangan berbeda mempengaruhi pelacakan AR. Optimasi untuk kondisi rata-rata.

Mengeluarkan dan Menguji AR Apps

Pengujian Real ⁇ device tidak ⁇ negotiable. Gunakan ARKit Fitur Debugging:

  • ifac untuk menunjukkan titik fitur, asal dunia, dan physics wireframes.
  • Daftar log log log log log log in untuk melihat ketika permukaan terdeteksi.
  • Aidd an to monitor keadaan pelacakan dan kesalahan.
  • Uji coba pada generasi perangkat multiple (misalnya, iPhone 8 vs iPhone 14 Pro) untuk mengukur kinerja.

Untuk pengujian otomatis UI, Anda dapat mengejek data AR, tetapi pengujian manual tetap penting untuk ketepatan.

Kekecualian Kesimpulan

RealityKit abstraks banyak dari kompleksitas pengembangan AR, tetapi membangun pengalaman terpoles membutuhkan perhatian terhadap arsitektur entitas, interaksi pengguna, kinerja, dan desain. Dengan menggabungkan teknik tertutup ⁇ dari setup adegan dan penanganan gestur ke fisika dan kolaborasi ⁇ Anda dapat membuat aplikasi AR yang melibatkan pengguna dan memanfaatkan potensi penuh perangkat keras iOS. Tetap arus dengan kerangka AR Apple yang berkembang dan selalu menguji pada perangkat nyata untuk memastikan pengalaman yang tak berperikemanusiaan dan immersif.