Ajouter un sous-espace qui suit une cible

Appareils XR concernés
Ces conseils vous aideront à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires

Alors qu'un Subspace standard reste à une position fixe déterminée par le système, vous pouvez parfois souhaiter que l'UI spatiale de votre application se déplace de manière dynamique avec l'utilisateur ou reste associée à un emplacement spécifique dans son environnement ou dans le monde réel. Vous pouvez transmettre un FollowTarget au paramètre follow de Subspace pour créer des expériences telles que des affichages tête haute verrouillés ou des panneaux d'informations associés à des objets réels.

Ajouter un sous-espace qui suit la vue de l'utilisateur

Pour ajouter un sous-espace positionné par rapport au champ de vision de l'utilisateur, utilisez FollowTarget.view. Selon le mode de suivi que vous spécifiez, cela vous permet de suivre en continu les mouvements de la tête de l'utilisateur ou de placer du contenu de manière statique en fonction de l'endroit où il regarde. Vous pouvez l'utiliser pour des éléments tels que des affichages tête haute, des notifications persistantes ou des commandes d'action rapide.

Déclarer et demander des autorisations

Avant de demander des autorisations, vous devez les déclarer dans le fichier manifeste de votre application à l'aide de l'élément <uses-permission>.

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for head tracking. -->
    <uses-permission android:name="android.permission.HEAD_TRACKING"/>
    <application ...>
        ...
    </application>
</manifest>

Demandez maintenant les autorisations. Pour en savoir plus, consultez les principes et workflows d'autorisation afin de vous assurer d'offrir la meilleure expérience possible à vos utilisateurs. Par exemple, vérifiez si l'utilisateur a déjà accordé les autorisations d'exécution requises par votre application et si votre application doit afficher une justification à l'utilisateur avant de demander cette autorisation.

Configurer votre session

Vous allez maintenant configurer la session de votre application créée pour vous lorsque vous utilisez Jetpack Compose pour XR en définissant DeviceTrackingMode.SPATIAL :

val session = checkNotNull(LocalSession.current)
session.configure(
    config = Config.Builder(session.config).setDeviceTracking(DeviceTrackingMode.SPATIAL)
        .build()
)

Créer le sous-espace

Enfin, vous allez créer un sous-espace qui cible la vue de l'utilisateur, ainsi qu'un mode de suivi :

// Example: A subspace that softly follows the user's view (like a HUD)
Subspace(
    follow = FollowTarget.view(
        // Customizing the soft follow to move slightly faster and tracking all dimensions
        mode = FollowMode.soft(
        )
    ),
    modifier = modifier,
) {
    SpatialPanel {
      // SpatialPanel Content
    }
}

Modes de suivi pour les sous-espaces qui ciblent la vue d'un utilisateur

Lorsque vous utilisez FollowTarget.view comme cible, vous pouvez personnaliser le comportement du contenu en spécifiant un FollowMode :

  • FollowMode.soft : le contenu rattrape progressivement les mouvements de la cible, créant un effet flottant fluide.
  • FollowMode.snap : le contenu est placé une fois devant l'utilisateur en fonction de sa position de vue initiale, puis reste immobile.
  • FollowMode.tight : le contenu suit immédiatement la vue de l'utilisateur avec un délai minimal, en restant étroitement lié à ses mouvements.

Tous les modes de suivi vous permettent de choisir les dimensions de mouvement à suivre parmi les options suivantes :

  • Axe X
  • Axe Y
  • Présenter
  • Rouleau
  • Lacet
  • RotationOnly : permet de spécifier une seule valeur pour suivre les dimensions liées à la rotation (tangage, lacet et roulis).

Vous pouvez choisir n'importe quelle combinaison de ces dimensions ou utiliser la valeur par défaut TrackedDimensions.All, qui les suit toutes.

Ajouter un sous-espace qui suit une caractéristique environnementale

Pour ajouter un sous-espace qui verrouille strictement le contenu spatial à un élément physique de l'environnement de l'utilisateur, utilisez FollowTarget.anchor(). Utilisez ce type de cible pour suivre un plan détecté, une ancre ou un emplacement géospatial.

Le suivi des éléments du monde réel nécessite des autorisations et des configurations de session supplémentaires, en fonction de l'élément que vous suivez.

Pour obtenir des instructions détaillées sur l'utilisation des fonctionnalités de perception pour les fonctionnalités ARCore, ainsi que sur la configuration des autorisations nécessaires et de votre session pour utiliser FollowTarget.anchor(), consultez la documentation du SDK Jetpack XR pour les plans, les ancres et les poses géospatiales.

L'exemple suivant crée un sous-espace qui suit une ancre réelle :

// A subspace locked to a real-world anchor
Subspace(
    follow = FollowTarget.anchor(anchor = myAnchor)
) {
    // Rotate the panel to ensure it faces the user while remaining anchored
    SpatialPanel(SubspaceModifier.rotateToLookAtUser()) {
      // SpatialPanel Content
    }
}

Éviter le chevauchement spatial

Chaque Subspace que vous créez gère sa propre scène 3D indépendante et n'a pas connaissance des autres sous-espaces existants. Il n'évite donc pas automatiquement les collisions.

Pour éviter que votre HUD verrouillé sur la tête ne traverse vos panneaux de POI ancrés (Z-fighting), gérez explicitement vos volumes de mise en page à l'aide de ces méthodes :

  1. Utilisez des décalages : utilisez SubspaceModifier.offset pour rapprocher ou éloigner l'UI périphérique (comme votre HUD) sur l'axe Z, ou déplacez-la vers les bords du champ de vision de l'utilisateur.
  2. Limiter les tailles : appliquez des modificateurs tels que requiredSizeIn pour limiter les cadres de délimitation de vos espaces.

Pour en savoir plus sur les espaces de coordonnées, les contraintes de mise en page et toutes les configurations de suivi disponibles, consultez la documentation de référence sur Subspace.