
-
Explorer les entrées d’accessoires spatiaux sur visionOS
Découvrez comment intégrer des accessoires spatiaux dans votre app. Affichez du contenu virtuel, interagissez avec votre app, suivez-le dans l'espace et collectez des informations sur les interactions pour offrir des expériences virtuelles enrichies sous visionOS.
Chapitres
- 0:00 - Démarrer
- 2:41 - Développer une app de sculpture
- 13:37 - Suivez les accessoires avec ARKit
- 14:45 - Considérations relatives à la conception
Ressources
Vidéos connexes
WWDC25
WWDC24
- Build a spatial drawing app with RealityKit
- Create enhanced spatial computing experiences with ARKit
WWDC21
WWDC20
-
Rechercher dans cette vidéo…
Bonjour ! Je m’appelle Amanda Han, ingénieure de l’équipe RealityKit. Je vais expliquer comment créer une app de sculpture spatiale pour visionOS avec la nouvelle prise en charge des accessoires spatiaux. Sur visionOS, nous avons un paradigme de saisie « yeux et mains d’abord ». Vous pouvez naviguer sur Apple Vision Pro efficacement avec vos yeux et vos mains. Vous pouvez créer plus d’expériences sur Vision Pro avec des outils permettant de bénéficier d’un contrôle plus précis, d’une saisie par boutons et d’un retour haptique. Cette année, les accessoires spatiaux sont pris en charge. Deux accessoires spatiaux sont désormais disponibles : la manette PlayStation VR2 Sense et Logitech Muse.
La manette PS VR2 Sense est idéale pour le gaming. Elle a des boutons, un joystick et une gâchette. Elle permet même de naviguer dans le système avec des gestes standard.
La manette PS VR2 Sense peut être suivie dans l’espace, vous pouvez faire du sport, comme dans Pickle Pro de Resolution Games !
Logitech Muse est un autre nouvel accessoire. Logitech Muse est équipé de capteurs de force permettant une saisie variable sur la pointe et le bouton latéral, et un retour haptique.
La précision est idéale pour les apps de productivité et de créativité. Voici un exemple avec une app de sculpture que je vais créer dans cette session, et l’app Photos ouverte à côté. Vous pouvez utiliser ces accessoires dans des apps Full Space et Shared Space. Nous suivons la position et la rotation de ces accessoires spatiaux à l’aide des caméras d’Apple Vision Pro et des capteurs des accessoires spatiaux. Vous pouvez utiliser le retour haptique tactile dans vos apps pour une meilleure immersion. Vous vous connectez à des accessoires spatiaux avec le framework Game Controller et accédez aux données d’ancrage avec RealityKit ou ARKit. Je vais expliquer comment utiliser les entrées d’accessoires spatiaux dans vos apps. Je vais créer une app de sculpture en combinant Game Controller, RealityKit et ARKit. Je vais voir comment utiliser ARKit pour suivre les accessoires spatiaux. Enfin, j’aborderai quelques considérations de conception.
Commençons à créer l’app de sculpture. Commencez par configurer le projet Xcode.
Connectez-vous à un accessoire spatial via le framework Game Controller. Affichez l’outil de sculpture virtuellement. Interagissez avec l’app en sculptant dans de l’argile virtuelle. Puis, affichez une barre d’outils réactive basée sur les données de suivi des interactions. Commençons par la configuration dans Xcode.
J’utilise le framework Game Controller pour gérer les connexions avec mes accessoires. J’ajoute la prise en charge des manettes de jeu spatiales au fichier plist via l’éditeur de capacités Xcode. J’indique que je prends en charge les manettes de jeu avec suivi spatial des accessoires en cochant la case Spatial Gamepad.
Je décris comment j’utiliserai l’accessoire dans le champ de description Accessory Tracking Usage du fichier plist de l’app.
Pour l’app de sculpture, je dis que je « suis les mouvements de l’accessoire pour sculpter de l’argile virtuelle ». Cela s’affichera dans une fenêtre contextuelle permettant d’activer le suivi des accessoires.
Maintenant, suivons l’un des accessoires. Les accessoires spatiaux requièrent des connexions actives pour transmettre les données des capteurs inertiels. Je dois donc détecter la connexion pour créer l’outil de sculpture.
J’utiliserai le framework Game Controller pour détecter les connexions avec les accessoires spatiaux. Écoutez les événements de connexion et déconnexion ou itérez sur les connexions actuelles. Pour en savoir plus sur les manettes de jeu, regardez «Tap into virtual and physical game controllers ». Deux des classes de Game Controller prennent en charge le suivi des accessoires spatiaux : GCController et GCStylus. Elles représentent respectivement les manettes de jeu et les stylets. Toutes deux sont conformes au protocole GCDevice.
Les manettes de jeu et les stylets ne prennent pas tous en charge le suivi des accessoires spatiaux. Je vais montrer comment vérifier cela dans notre app de sculpture. Il se peut que les accessoires de mon sculpteur numérique ne soient pas connectés à l’ouverture de l’app. Je vais donc devoir attendre qu’ils connectent leurs accessoires. Pour les stylets, j’attendrai la notification GCStylusDidConnect et récupérerai le GCStylus. Pour vérifier que GCStylus prend en charge le suivi spatial des accessoires, je vérifie que sa catégorie est Spatial Stylus. L’accessoire peut également se déconnecter pendant la durée de vie de l’app. Les événements de déconnexion s’appliquent de la même manière. Pour utiliser l’API GCController, je peux remplacer GCStylus par GCController, en vérifiant que GCController a la catégorie de produit Spatial Controller. J’ai établi une connexion, mais je ne vois rien sur mon accessoire. Affichez une astuce virtuelle à la fin. Sur visionOS, la technique de suivi de la position et de l’orientation d’un objet dans l’espace s’appelle l’ancrage. Que vous utilisiez RealityKit, ARKit ou une combinaison des deux, l’ancrage à des accessoires est disponible dans les apps Full Space et Shared Space. L’app de sculpture utilisera Shared Space, car il est très utile d’afficher des images de référence d’autres apps telles que Safari ou Photos pour la sculpture. Pour protéger la confidentialité, seule l’app sélectionnée et autorisée peut suivre les mouvements des accessoires.
Chaque accessoire identifie son ensemble d’emplacements d’ancrage. La manette PS VR2 Sense identifie la cible, la prise et la surface de prise. Logitech Muse n’indique pas où placer votre prise, mais uniquement l’emplacement cible. L’app de sculpture s’ancre sur la cible de chaque accessoire spatial. J’utiliserai une RealityKit AnchorEntity pour ancrer le contenu virtuel à mon accessoire. Une AnchorEntity est une entité qui associe du contenu virtuel au monde physique. Elle peut interagir avec d’autres éléments de ma scène RealityKit. Examinons l’ancrage dans le code. Créez un AccessoryAnchoringSource depuis un accessoire spatial.
Je cible l’emplacement « aim » de mon accessoire. Si mon accessoire ne prend pas en charge cet emplacement, je ne l’ancrerai pas.
Je vais créer l’AnchorEntity avec une cible « accessory », l’emplacement « aim » et le mode de suivi prévu.
J’ai créé l’AnchorEntity à gauche. Le mode de suivi prédit utilise un modèle sophistiqué pour prédire où se trouvera l’accessoire au moment où le contenu sera rendu. Si vos mouvements sont saccadés, le mouvement risque d’être trop important. Vous pouvez le voir à l’image 4, où l’image prédite en violet ne correspond pas à la position réelle en gris. Utilisez-le pour le rendu et les interactions à latence faible. Utilisez le mode de suivi continu quand vous avez besoin de plus de précision. Ce mode a une latence plus élevée, mais offre plus de précision des poses, sans dépassement. Pour notre accessoire, je choisirai de maximiser la réactivité avec le mode de suivi prédictif. Dans une app de sculpture, les sculpteurs ne sont pas censés effectuer des mouvements saccadés. Maintenant, j’ai une pointe virtuelle ancrée sur mon accessoire. Cependant, mon outil de sculpture ne peut interagir avec aucun autre élément de l’app. Je souhaite sculpter l’argile selon la position de mon accessoire et fournir un retour haptique. Pour sculpter l’argile virtuelle, je dois obtenir la transformation de l’outil de sculpture. L’an dernier, l’ajout de SpatialTrackingSession a permis d’obtenir les transformations des types AnchorEntity cibles configurés. Cette année, .accessory fait partie de la liste des configurations SpatialTrackingSession prises en charge. Une fois .accessory ajouté à la configuration de suivi spatial, je lance la session pour obtenir les transformations AnchorEntity d’accessoire. Pour en savoir plus sur SpatialTrackingSession, regardez, « Build a spatial drawing app with RealityKit ». Ajoutons une sensation tactile à la sculpture. Un accessoire spatial peut avoir des propriétés haptiques, ce qui offre une rétroaction. Je l’ajoute à notre app de sculpture pour sentir l’argile. Récupérez les données haptiques de l’accessoire, créez un moteur haptique et lancez-le.
Pour en savoir plus sur le retour haptique et sa configuration regardez « Advancements in Game Controllers ». Examinons comment sculpter l’argile avec l’outil de sculpture. Chaque fois que l’accessoire se déplace dans l’argile, j’enlève un peu de matière et je joue des effets haptiques, pour une expérience immersive. Cependant, je risque d’enlever trop de matière à certains endroits, comme ici. Je vais ajouter un mode de sculpture additive. J’affiche une barre d’outils pour basculer entre les modes de sculpture, qui apparaît selon les interactions avec les accessoires. Je l’afficherai à gauche ou à droite de l’accessoire, selon la main qui le tient. Pour cela, je peux utiliser ARKit AccessoryAnchor. ARKit AccessoryAnchor offre quatre propriétés : la main qui tient l’accessoire, le mouvement relatif de l’accessoire dans l’espace, le mouvement de rotation relatif dans l’espace et l’état de suivi. La qualité du suivi diminue si les capteurs ou les caméras ont une couverture réduite.
Pour des cas spécifiques, tels que la prise de mesures dans le monde réel à l’aide d’accessoires spatiaux, ARKit expose une API qui permet de recevoir des transformations d’ancrage métrique. Pour en savoir plus, consultez l’API Coordinate Spaces dans la documentation. Revenons à mon exemple. Je dois accéder à ARKit AccessoryAnchor, mais je ne dispose que de RealityKit AnchorEntity. RealityKit permet d’obtenir des ancres ARKit depuis n’importe quelle RealityKit AnchorEntity si une SpatialTrackingSession est en cours d’exécution et configurée. Configurons une fonction pour obtenir l’ARKit AccessoryAnchor depuis une RealityKit AnchorEntity. Il suffit d’accéder à ARKitAnchorComponent sur une entité AnchorEntity, de récupérer son ARKitAnchor, puis de le convertir conditionnellement en AccessoryAnchor. Pour en savoir plus sur ARKitAnchorComponent, écoutez « What’s new in RealityKit ».
Passons à l’affichage de la barre d’outils. Je récupère mon accessoryAnchor depuis mon AnchorEntity avec la fonction d’aide que j’ai créée. J’utilise la latéralité pour déterminer la position de la barre d’outils. Cette propriété est stockée dans accessoryAnchor.heldChirality.
Si la latéralité est gauche, j’affiche la barre d’outils en x positif, et inversement pour la latéralité droite. Sinon, l’accessoire n’est tenu dans aucune des deux mains, je ne le déplace donc pas.
Observons la barre d’outils réactive dans l’app. Si j’appuie sur le bouton en tenant l’accessoire dans ma main droite, il apparaît à gauche de mon accessoire. Je peux passer en mode additif et corriger l’erreur commise plus tôt.
Et... pas mal ! Récapitulons. J’ai créé une app de sculpture immersive à l’aide des nouvelles API d’accessoires spatiaux. J’ai utilisé Game Controller pour me connecter aux accessoires. J’ai utilisé les API RealityKit pour créer l’outil de sculpture. J’ai affiché une barre d’outils réactive en combinant les capacités de RealityKit et d’ARKit. L’app finale est esthétique et intuitive. Si vous préférez travailler directement avec ARKit ou si vous développez une app avec un rendu personnalisé, certaines API permettront d’obtenir des fonctionnalités équivalentes pour le suivi des accessoires spatiaux. Voyons cela. Je vais présenter les points clés d’ARKit pour le suivi des accessoires à l’aide du fournisseur de suivi des accessoires et des mises à jour des ancrages d’accessoires. Utilisez un GCStylus ou un GCController pour créer un accessoire.
Utilisez un fournisseur de suivi des accessoires pour suivre les objets accessoires. Quand un accessoire se connecte ou se déconnecte de votre app, vous devez le manipuler avec précaution. Vous devrez relancer la session ARKit avec la configuration modifiée des accessoires.
Pour découvrir la mise en œuvre, consultez l’exemple d’app ARKit « Tracking accessories in volumetric windows ». Les ancrages d’accessoires sont similaires aux ancrages de mains en termes de modèles de mise à jour. Vous pouvez recevoir des mises à jour précises dans un flux ou utiliser la prédiction à la demande pour du feedback interactif. Pour en savoir plus sur la prédiction d’ARKit, regardez « Create enhanced spatial computing experiences with ARKit ». J’ai présenté de nombreuses API d’accessoires spatiaux intéressantes. Ensuite, je vais aborder des points à retenir sur la conception de vos apps. Commençons par l’utilisation des gestes pour interagir avec l’UI. Vous pouvez indiquer à une vue de recevoir les entrées d’une manette de jeu, les boutons ou gâchettes, comme méthode d’entrée au lieu des gestes. Vous pouvez désormais gérer les gestes manuels standard et les manettes de jeu comme entrées dans vos vues.
Voici cela dans le code. Indiquez à la vue SwiftUI de recevoir les événements de la manette de jeu. Dites-lui de recevoir des événements de mouvement en définissant le modificateur .receivesEventsInView.
Si la manette de jeu dispose d’un suivi spatial des accessoires, le geste d’événement spatial renseignera la chiralité, également appelée latéralité, de la manette de jeu.
Pour les apps dans un Full Space, envisagez l’API .persistentSystemOverlays pour masquer l’indicateur d’accueil et l’API .upperLimbVisibility pour masquer les membres supérieurs et accessoires. Cela peut renforcer l’immersion dans les apps et les jeux. Les accessoires spatiaux offrent de nouvelles façons d’interagir avec les apps et les jeux. Afin que votre app prenne en charge le plus grand nombre d’utilisateurs, offrez une prise en charge adaptative pour les accessoires spatiaux et les mains.
ARKit suit les mains plus rapidement en natif, d’où une qualité accrue des données saisies par les mains et les yeux.
Indiquez que vous prenez en charge les manettes de jeu avec suivi des accessoires spatiaux, en ajoutant le badge de prise en charge des manettes de jeu spatiales sur l’App Store. Si votre app requiert des manettes de jeu avec suivi des accessoires spatiaux, ajoutez le badge indiquant qu’une manette de jeu spatiale est requise. Consultez la documentation pour connaître les clés à ajouter au fichier plist de votre app afin d’afficher ces badges. Concluons cette session. Les accessoires spatiaux permettent un contrôle plus précis des entrées et un retour haptique. Intégrez des accessoires à l’aide de Game Controller, RealityKit et ARKit. Lorsque vous concevez vos apps, prévoyez une prise en charge adaptative pour les mains et les accessoires. Ceci n’est qu’un aperçu des apps et des jeux que vous pouvez créer avec les accessoires spatiaux. J’ai hâte de voir vos créations. Passez une excellente WWDC25 !
-
-
0:09 - Get in-app transforms
// Get in-app transforms let session = SpatialTrackingSession() let configuration = SpatialTrackingSession.Configuration(tracking: [.accessory]) await session.run(configuration)
-
4:57 - Check for accessory support
// Check spatial accessory support NotificationCenter.default.addObserver(forName: NSNotification.Name.GCControllerDidConnect, object: nil, queue: nil) { notification in if let controller = notification.object as? GCController, controller.productCategory == GCProductCategorySpatialController { } }
-
7:20 - Anchor virtual content to an accessory
// Anchor virtual content to an accessory func setupSpatialAccessory(device: GCDevice) async throws { let source = try await AnchoringComponent.AccessoryAnchoringSource(device: device) guard let location = source.locationName(named: "aim") else { return } let sculptingEntity = AnchorEntity(.accessory(from: source, location: location), trackingMode: .predicted) }
-
9:45 - Add haptics to an accessory
// Add haptics to an accessory let stylus: GCStylus = ... guard let haptics = stylus.haptics else { return } guard let hapticsEngine: CHHapticEngine = haptics.createEngine(withLocality: .default) else { return } try? hapticsEngine.start()
-
11:25 - Access ARKit anchors from AnchorEntity
// Access ARKit anchors from AnchorEntity func getAccessoryAnchor(entity: AnchorEntity) -> AccessoryAnchor? { if let component = entity.components[ARKitAnchorComponent.self], let accessoryAnchor = component.anchor as? AccessoryAnchor { return accessoryAnchor } return nil }
-
-
- 0:00 - Démarrer
Cette séance dédiée au développement sur visionOS se concentre sur la création d’une app de sculpture spatiale en tirant parti du nouveau support des accessoires spatiaux. visionOS permet désormais de concevoir des apps utilisant les manettes PlayStation VR2 Sense et le Logitech Muse, pour un contrôle plus précis et une immersion renforcée. La manette PS VR2 Sense, avec ses boutons, son joystick et sa gâchette, est idéale pour les jeux et la navigation, tandis que le Logitech Muse, doté de capteurs de pression et d’un retour haptique, est particulièrement adapté aux apps de productivité et de création. Cette séance porte sur la création d’une app de sculpture spatiale tirant parti du nouveau support des accessoires spatiaux. visionOS permet désormais de développer des apps compatibles avec la manette PlayStation VR2 Sense et le Logitech Muse, pour un contrôle plus précis et une immersion renforcée. La manette PS VR2 Sense, avec ses boutons, son joystick et sa gâchette, est bien adaptée aux jeux et aux expériences interactives ludiques, tandis que le Logitech Muse, équipé de capteurs de pression et de retour haptique, se prête parfaitement aux apps de productivité et de création. Connectez ces accessoires à l’aide du framework Game Controller et utilisez RealityKit ou ARKit pour suivre leurs mouvements et rotations. La séance montre comment créer une app de sculpture et aborde les aspects de design pour intégrer les accessoires spatiaux dans les apps full-space et shared-space de visionOS.
- 2:41 - Développer une app de sculpture
Le projet d’exemple développe l’app de sculpture en configurant le projet Xcode et en activant la prise en charge des manettes spatiales via une entrée dans le fichier plist. Ensuite, le projet utilise le framework Game Controller pour détecter et connecter les accessoires spatiaux. Une fois la connexion établie, l’app ancre le contenu virtuel à la position Aim de l’accessoire en utilisant AnchorEntity de RealityKit. Cette technique d’ancrage permet d’afficher un outil de sculpture virtuel qui suit avec précision les mouvements de l’accessoire dans l’espace. L’app gère les connexions et déconnexions, et utilise le mode de suivi prédictif pour lisser le rendu virtuel, garantissant ainsi une expérience de sculpture réactive et intuitive. Pour permettre les interactions avec l’argile virtuelle, l’app doit accéder à la transformation de l’outil de sculpture. Cela est rendu possible grâce à la SpatialTrackingSession, qui prend désormais en charge le suivi des accessoires, permettant à l’app d’obtenir les transformations de toute AnchorEntity associée à un accessoire. Le projet ajoute ensuite des retours haptiques pour offrir un retour tactile, rendant l’expérience de sculpture encore plus immersive. L’app peut déterminer quelle main tient l’accessoire grâce à l’AccessoryAnchor d’ARKit, qui fournit également des informations sur le mouvement relatif et l’état du suivi. En combinant les API de RealityKit et d’ARKit, l’app affiche une barre d’outils réactive qui s’adapte à la latéralité de l’utilisateur, lui permettant de changer facilement de mode de sculpture. Cela améliore l’expérience utilisateur et permet un contrôle précis du processus de sculpture.
- 13:37 - Suivez les accessoires avec ARKit
Si vous développez une app avec votre propre rendu, ARKit propose des API pour suivre des accessoires spatiaux comme GCStylus et GCController. Utilisez un fournisseur de suivi d’accessoires pour créer et gérer des objets Accessory. Lorsque des accessoires se connectent ou se déconnectent, relancez la session ARKit avec une nouvelle configuration Accessory. Les ancrages d’accessoires sont similaires aux ancrages de mains : vous pouvez choisir entre des mises à jour dans un flux ou utiliser la prédiction à la demande pour du feedback interactif.
- 14:45 - Considérations relatives à la conception
Une prise en charge adaptative pour les accessoires spatiaux et les mains est recommandé afin de garantir une accessibilité optimale pour l’utilisateur. ARKit permet désormais d’intégrer des accessoires spatiaux avec des manettes de jeu, offrant un contrôle d’entrée amélioré et un retour haptique dans les vues SwiftUI. Utilisez le modificateur receivesEventsInView pour gérer à la fois les gestes manuels standard et les évènements des manettes de jeu. Vous pouvez afficher des badges App Store pour indiquer la compatibilité avec les manettes de jeu spatiales. Pour les apps full-space, des API permettent de masquer l’indicateur d’accueil et les membres supérieurs, pour plus d’immersion.