RealityUi est une collection de services publics et d'objets d'interface utilisateur pour RealityKit. Les objets d'interface utilisateur inclus dans la réalitéui visent à offrir des normes d'interface utilisateur familières, mais dans un cadre 3D pour la réalité augmentée et virtuelle via RealityKit.
RealityUi a également une collection de composants pour interfacer avec toute entité via les interactions Touch ou Drag.



Ajoutez l'URL de ce référentiel à votre projet XCode 11+ sous Project > Swift Packages .
https://github.com/maxxfrazer/RealityUI.git
Ajoutez import RealityUI en haut de votre fichier Swift pour démarrer.
Tous les composants utilisés dans Realityui doivent être enregistrés avant d'être utilisés, appelez simplement RealityUI.registerComponents() n'importe où dans votre application avant que les classes ne commencent par RUI initialisées pour éviter les problèmes avec cela. Pour plus d'informations sur ce que l'on entend par enregistrement des composants, voir la documentation d'Apple ici.
Avec VisionOS, les gestes peuvent être activés sur une vie de réalité à l'aide de modificateurs View/addRUIDragGesture() ou View/addRUITapGesture() , ou en ajoutant les gestes directement avec .gesture(RUIDragGesture()) ou. .gesture(RUITapGesture()) . La RealityView pourrait ressembler à ceci:
RealityView { content in
let swtch = RUISwitch ( )
swtch . scale = . init ( repeating : 0.1 )
content . add ( swtch )
} . addRUIDragGesture ( )L'extrait ci-dessus ajoute un commutateur / bascule interactif à la scène.
Ce geste fonctionne pour toute entité avec RuidragComponent, par exemple:
RealityView { content in
let movable = try ! await ModelEntity ( named : " toy_biplane " )
movable . generateCollisionShapes ( recursive : false )
movable . components . set ( RUIDragComponent ( type : . move ( nil ) ) )
movable . components . set ( InputTargetComponent ( ) )
content . add ( movable )
} . addRUIDragGesture ( ) 
L'activation des gestes de réalité peut être Doen en appelant RealityUI.enableGestures(.all, on: ARView) , ARView étant votre instance d'un objet Arview.
Ruislider, Ruiswitch, Ruiistepper et Ruibutton utilisent tous RUIDragComponent , qui nécessite .ruiDrag . Si vous ajoutez des éléments qui utilisent le composant RUITapComponent vous pouvez utiliser le geste .tap . Je recommanderais simplement d'utiliser .all en permettant des gestes, car ceux-ci se déplaceront inévitablement à mesure que RealityUi se développera.
RealityUI.enableGestures(.all, on: arView)
Par défaut, toutes les entités RealityUi sont assez grandes. Ceci est utilisé pour normaliser les tailles afin que vous sachiez toujours à quoi vous attendre. Par exemple, tous les pouces d'interface utilisateur sont des sphères d'un diamètre de 1 mètre, qui est 1 unité en réalité, ± tous les ajustements de rembourrage. Toutes les entités RealityUi sont confrontées à [0, 0, -1] par défaut. Pour les faire pointer sur l'appareil photo utilisateur, ou .zero , vous pouvez utiliser le .look(at:,from:,relativeTo:) méthode comme SO: .look(at: .zero, from: [0, 0, 1]) . Ou si vous voulez qu'il se retourne immédiatement si vous l'avez positionné à [0, 0, -1] , définissez l'orientation sur simd_quatf(angle: .pi, axis: [0, 1, 0]) . L'utilisation de la méthode .look () fonctionne ici en définissant la valeur at: dans la direction dans laquelle le bouton doit être utilisé.
Ruiiswitch est un interrupteur à bascule 3D avec un état ONT et OFF. La boîte de délimitation par défaut est 2x1x1m

Plus de détails
Le ruiiste est utilisé pour incrémenter ou diminuer une valeur. La boîte de délimitation par défaut est 2x1x0.25m

Plus de détails
Une piste interactive pour représenter une valeur interpolée. La boîte de délimitation par défaut est 10x1x1m, y compris le pouce.

Plus de détails
Ruibutton est utilisé pour initier une action spécifiée. L'action ici ne déclenchera que si le geste commence sur un bouton et se termine également sur le même bouton. Ceci est similaire à l'événement UIControl de touchupsineside. Boîte de limite de bouton par défaut avant de déprimer le bouton dans la base est [1, 1, 0.3]

Plus de détails
Toutes les entités de contrôle RealityUi utilisent des gestes personnalisés qui ne sont pas standard en réalité, mais certains d'entre eux ont été isolés afin que n'importe qui puisse les utiliser pour manipuler sa propre scène de réalité.
Faites glisser des objets n'importe où dans l'espace avec 3 degrés de liberté avec RuidragComponent, en utilisant le type .move.

Ce type a une contrainte facultative, pour fixer le mouvement dans certains critères:
CONSTRAINTION DU BOX : restreint le mouvement dans une BoundingBox spécifiée, fournissant une zone définie où l'entité peut se déplacer.
Contrainte des points : limite le mouvement à un ensemble de points prédéfinis, représentés comme un tableau de SIMD3<Float> .
Contrainte de serrage : utilise une fonction de serrage personnalisée pour contrôler le mouvement. Cette fonction prend un SIMD3<Float> en entrée et renvoie un SIMD3<Float> modifié pour déterminer la nouvelle position.
Déverrouillez la capacité de faire pivoter une entité RealityKit avec un seul doigt.

Plus de détails
Créez un objet dans votre scène RealityKit avec une action, et il sera automatiquement ramassé chaque fois que l'utilisateur s'y tire!
Pas de GIF pour celui-ci, mais consultez RuitapComponent pour voir comment l'ajouter à une entité de votre application.
Si vous vouliez plutôt utiliser quelque chose de similaire à un robinet "retouche à l'intérieur", vous pouvez utiliser RuidragComponentType / cliquez.

Il n'y a pas beaucoup d'animations ajoutées par défaut à RealityKit, en particulier aucune que vous pouvez définir pour répéter. Voir la page Wiki sur la façon d'utiliser ces animations.
Faites tourner facilement une entité autour d'un axe en utilisant Ruispin.
Plus de détails
Secouez une entité pour attirer l'attention ou signaler que quelque chose était incorrect.
Plus de détails
Il est déjà possible de placer du texte dans RealityKit, mais je pensais qu'il avait besoin d'une petite mise à niveau.
Avec Ruitext, vous pouvez facilement créer une entité avec le texte spécifié placé avec son centre de boîte à délimitation au milieu de votre entité.

Plus de détails
Plus d'informations sur tout ce qui est fourni dans ce package rapide dans la documentation.
Voir également l'exemple de projet pour iOS dans ce référentiel.