Table of Contents
Εισαγωγή στην οικοδόμηση ενισχυμένες εμπειρίες πραγματικότητας με πραγματικότηταKit
Το πλαίσιο RealityKit της Apple παρέχει στους προγραμματιστές ένα υψηλού επιπέδου, performant API για να κατασκευάσουν εφαρμογές AR για iOS. Αυτό το άρθρο επεκτείνεται στις θεμελιώδεις βάσεις, καλύπτοντας την εγκατάσταση, την αρχιτεκτονική οντότητας ⁇ συνιστώσα, αλληλεπίδραση χρήστη, animation, φυσική, συνεργασία και βελτιστοποίηση. Μέχρι το τέλος, θα έχετε μια πρακτική κατανόηση του πώς να δημιουργήσετε στιλβωμένες εμπειρίες AR χρησιμοποιώντας Swift και RealityKit.
Έναρξη: ⁇ έργου και απαιτήσεις
Για να αναπτύξετε εφαρμογές AR με RealityKit, χρειάζεστε Xcode 13 ή αργότερα, μια φυσική συσκευή iOS με ένα τσιπ A9 ή νεότερη (iPhones SE, 6s, και αργότερα; iPads 5th gen και αργότερα), και ένα λογαριασμό Apple Developer για δοκιμές.
Δημιουργήστε ένα νέο έργο Xcode και επιλέξτε το Augmented Reality App πρότυπο. Επιλέξτε SwiftUI ή UIKit ανάλογα με την προτίμησή σας ⁇ RealityKit λειτουργεί απρόσκοπτα και με τα δύο. Το πρότυπο παρέχει ένα ] και μια βασική ρύθμιση σκηνής.
Εναλλακτικά, μπορείτε να προσθέσετε το RealityKit με το χέρι σε ένα υπάρχον έργο εισάγοντας το πλαίσιο:
import RealityKit
import ARKit
Βεβαιωθείτε ότι η NSCameraUsageDescription[[LFT:1]] έχει οριστεί στο [[LFT:2]] σας ⁇ μια φιλική προς το χρήστη συμβολοσειρά εξηγώντας γιατί η εφαρμογή χρειάζεται πρόσβαση κάμερας.
Για περισσότερες λεπτομέρειες, ανατρέξτε στην τεκμηρίωση της Apple RealityKit και ARKit documentation.
Κατανόηση του συστήματος Οντοτήτων ⁇ Συνιστώσας
Η αρχιτεκτονική RealityKit χρησιμοποιεί ένα Entity ⁇ Component[[LFT:1]]], το οποίο είναι θεμελιώδες για την κατασκευή σκηνών. Ένα [[LFT:3]] είναι ένα δοχείο που κατέχει συστατικά στοιχεία. Τα συστατικά καθορίζουν τη συμπεριφορά, την εμφάνιση, τη φυσική και άλλες ιδιότητες της οντότητας. Για παράδειγμα, ένα [[LFT:4] ορίζει ένα πλέγμα 3D, ένα χειρίζεται θέση/περιστροφή/κλίμακα, και ένα [[LFT:6] επιτρέπει προσομοίωση φυσικής.
Αυτή η σπονδυλωτή προσέγγιση καθιστά εύκολη τη σύνθεση σύνθετων αντικειμένων. Δημιουργείτε οντότητες, συνδέετε συστατικά και τα τακτοποιείτε σε μια ιεραρχία. Η ρίζα της σκηνής είναι [[LFT:7]] (συνήθως ένα [[LFT:8]]), το οποίο συνδέει το εικονικό περιεχόμενο με μια πραγματική ⁇ κοσμική τοποθεσία που ανιχνεύεται από το ARKit.
Δημιουργία ενός Anchor και προσθήκη περιεχομένου
Η πιο κοινή άγκυρα είναι μια άγκυρα επίπεδο, η οποία προσδίδει περιεχόμενο σε οριζόντιες ή κάθετες επιφάνειες. Εδώ είναι πώς να τοποθετήσετε ένα τρισδιάστατο μοντέλο σε οποιοδήποτε αναγνωρισμένο επίπεδο:
// 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)
Μπορείτε επίσης να δημιουργήσετε αγκυρώσεις σε συγκεκριμένες παγκόσμιες θέσεις χρησιμοποιώντας ή να επισυνάψετε περιεχόμενο σε ανιχνευμένες εικόνες ή πρόσωπα χρησιμοποιώντας ή .
Χτίζοντας μια βασική σκηνή AR με RealityKit
Πέρα από την απλή τοποθέτηση μοντέλου, θα πρέπει να διαχειριστείτε τον κύκλο ζωής AR προβολής. Σε μια εφαρμογή UIKit, προσθέστε στον ελεγκτή προβολής:
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, ενσωματώστε ότι γεφυρώνει στην ιεραρχία του SwiftUI.
Αλληλεπίδραση χρήστη: Χειρονομίες και χτύπημα ⁇ Δοκιμές
Για να κάνετε διαδραστική την εφαρμογή AR, πρέπει να χειριστείτε τις βρύσες, τις σύρσεις και τις περιστροφές των χρηστών. RealityKit παρέχει hit ⁇ testing για να προσδιορίσει ποια οντότητα άγγιξε ο χρήστης.
Πατήστε στο Place or Interact
Προσθέστε στον . Στον χειριστή χειρονομιών, καλέστε να ανακτήσει την οντότητα κάτω από το δάχτυλο:
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 ενάντια στις πραγματικές ⁇ παγκόσμιες επιφάνειες είναι πιο αξιόπιστη από την οικονομική επιτυχία ⁇ δοκιμάζοντας όταν θέλετε να τοποθετήσετε περιεχόμενο σε ένα αεροπλάνο. Χρησιμοποιήστε γι' αυτό.
Σύρετε και περιστρέψτε με τα χειροκροτήματα
Για να ενεργοποιήσετε τη σύρραξη, επισυνάψτε και ενημερώστε τη θέση της οντότητας κατά μήκος του αεροπλάνου. Για περιστροφή, χρησιμοποιήστε :
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)
}
Για μια ισχυρή εφαρμογή, εξετάστε τη χρήση από το πακέτο RealityKit ], ή την ιδιότητα χειρονομίας στο iOS 16+.
Προχωρημένα Χαρακτηριστικά: Κινήσεις, Φυσική και Συνεργασία
Κινούμενες εικόνες
Το RealityKit υποστηρίζει τόσο τα σκελετικά κινούμενα σχέδια (από αρχεία USDZ) όσο και τα κινούμενα σχέδια με βάση την ιδιοκτησία.
guard let model = try? ModelEntity.load(named: "dancing_character") else { return }
model.playAnimation(model.availableAnimations[0].repeat(duration: .infinity), transitionDuration: 0.5, startsPaused: false)
Μπορείτε επίσης να ενεργοποιήσετε μεταμορφώνει, αδιαφάνεια, ή προσαρμοσμένες παραμέτρους χρησιμοποιώντας τη μέθοδο [[LFT:29]] που είδαμε νωρίτερα. Για σύνθετες ακολουθίες, χρήση [[LFT:30]] ή [[LFT:31]].
Προσομοίωση Φυσικής
Συνδέστε για να ενεργοποιήσετε τη βαρύτητα, τις συγκρούσεις και τις δυνάμεις:
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)
Στατικά αντικείμενα (όπως τα τοιχώματα) θα πρέπει να έχουν .
Συνεργατικές συνεδρίες AR
Με τις συνεργατικές συνεδρίες του ARKit, πολλαπλές συσκευές μπορούν να μοιραστούν τον ίδιο κόσμο AR. Ενεργοποιήστε τη συνεργασία με τον καθορισμό των επιλογών συνεργασίας της συνεδρίας:
config.collaborationEnabled = true
arView.session.run(config)
Αποστολή σε άλλους συνομηλίκους μέσω ενός πλαισίου δικτύου (π.χ., Multipeer Connectivity). Η σκηνή RealityKit της κάθε συσκευής παραμένει συγχρονισμένη. Αυτό είναι ιδανικό για παιχνίδια πολλαπλών παικτών ή κοινές κριτικές σχεδιασμού.
Βελτιστοποίηση της Απόδοσης για τις Εμπειρίες Smooth AR
Οι εφαρμογές AR απαιτούν υψηλά ποσοστά πλαισίου (60 fps) για να αποφευχθεί η ναυτία κίνησης. Ακολουθήστε τις παρακάτω πρακτικές:
- Χρησιμοποιήστε μοντέλα χαμηλού πολυ και βελτιστοποιημένα αρχεία USDZ. Κρατήστε την κορυφή μετρώντας χαμηλά και χρησιμοποιήστε συμπιεσμένες υφές (KTX ή PNG).
- Περιορισμός του αριθμού των οντοτήτων στη σκηνή. Χρήση για να αποσφαλματωθούν οι μετρήσεις.
- Ελάχιστες κλήσεις κλήρωσης με τη χρήση instancing ⁇ μοιράζονται το ίδιο μοντέλο σε πολλαπλές οντότητες.
- Ακριβής απόδοση ποιότητας με σε παλαιότερες συσκευές.
- Χρησιμοποιήστε ] τη φόρτωση μοντέλου για να αποφύγετε το μπλοκάρισμα του κύριου νήματος. Φορτώστε τα μοντέλα σε μια ουρά φόντου και παρουσιάστε τα όταν είναι έτοιμα.
- Χειρίσου τον κύκλο ζωής συνεδρίας AR: κάλεσε όταν η εφαρμογή πάει στο παρασκήνιο, και επανεκτέλεσε τη διαμόρφωση σε πρώτο πλάνο.
Για λεπτομερείς οδηγίες, βλέπε το βιβλίο της Apple Δημιουργώντας μια εμβληματική εμπειρία AR και Δοκιμαστική και Αντιμετώπιση προβλημάτων στην εμπειρία AR σας.
Σχεδιασμός Διαισθητικών Διεπαφών AR
Η εμπειρία των χρηστών στο AR διαφέρει από τις παραδοσιακές εφαρμογές. Ακολουθήστε τις παρακάτω αρχές:
- Ανατροφοδότηση ανίχνευσης προσώπου[: Οραματιστείτε τα ανιχνευόμενα αεροπλάνα με κάνναβο ή περίγραμμα ώστε οι χρήστες να γνωρίζουν πού να τοποθετήσουν αντικείμενα.
- Οι γκέζες πρέπει να αισθάνονται φυσικές: Χρησιμοποιήστε άμεση χειραγώγηση (tap, drag, τσιμπήματα) και όχι αφηρημένους ελέγχους.
- Προβείτε σε οπτικές υποδείξεις: Επισήμανση διαδραστικών οντοτήτων ή εμφάνιση σταυρού όταν ο χρήστης δείχνει σε έγκυρο επίπεδο.
- Λαμνοβολία φωτισμού: Η ΠραγματικότηταKit μπορεί να εκτιμήσει αυτόματα το πραγματικό ⁇ παγκόσμιο φως και να το εφαρμόσει σε εικονικά αντικείμενα. Χρησιμοποιήστε για να ρυθμίσετε την ένταση.
- Δοκιμές σε διάφορα περιβάλλοντα: Διαφορετικός φωτισμός, υφές και μεγέθη δωματίων επηρεάζουν την παρακολούθηση AR. Βελτιστοποιήστε για μέσες συνθήκες.
Αποσφαλμάτωση και δοκιμή εφαρμογών AR
Χρήση Xcode του ARKit Debugging Χαρακτηριστικά[[LFT:1]:
- Ενεργοποίηση για να εμφανίσετε σημεία χαρακτηριστικών, παγκόσμια προέλευση και συρματόσχοινα φυσικής.
- Χρησιμοποιήστε κορμούς για να δείτε πότε ανιχνεύονται επιφάνειες.
- Προσθέστε ένα για να παρακολουθείτε την κατάσταση παρακολούθησης και τα λάθη.
- Δοκιμή σε πολλαπλές γενιές συσκευών (π.χ. iPhone 8 vs iPhone 14 Pro) για να μετρήσει την απόδοση.
Για αυτοματοποιημένες δοκιμές UI, μπορείτε να κοροϊδεύετε τα δεδομένα AR, αλλά οι χειροκίνητες δοκιμές παραμένουν απαραίτητες για την ακρίβεια.
Συμπέρασμα
RealityKit αφηρημένες πτυχές της πολυπλοκότητας της ανάπτυξης AR, αλλά η οικοδόμηση μιας στιλβωμένης εμπειρίας απαιτεί προσοχή στην αρχιτεκτονική οντότητας, την αλληλεπίδραση χρήστη, την απόδοση και το σχεδιασμό. Συνδυάζοντας τις τεχνικές που καλύπτονται ⁇ από τη ρύθμιση σκηνής και το χειρισμό χειρονομίας στη φυσική και τη συνεργασία ⁇ μπορείτε να δημιουργήσετε εφαρμογές AR που ενώνουν τους χρήστες και να αξιοποιήσουν το πλήρες δυναμικό του υλικού iOS. Μείνετε παρόντες με τα εξελισσόμενα πλαίσια AR της Apple και πάντα να δοκιμάζετε σε πραγματικές συσκευές για να εξασφαλίσετε μια απρόσκοπτη, εμβρυϊκή εμπειρία.