Développer
Développer
Sélectionnez votre plateforme

Ancrages spatiaux partagés

Mis à jour: 1 oct 2025

Présentation

La fonctionnalité d’ancrages spatiaux partagés (SSA) permet aux joueurs et joueuses situé·es dans le même espace physique de partager du contenu tout en jouant au même jeu. Avec la fonctionnalité SSA, vous pouvez créer un cadre de référence partagé et ancré dans le monde réel pour un grand nombre d’utilisateurs et utilisatrices. Par exemple, plusieurs personnes peuvent s’asseoir autour de la même table et jouer à un jeu de plateau virtuel posé dessus. Actuellement, la fonctionnalité SSA prend en charge les jeux multijoueurs dans une même pièce.
Même si vous créez et partagez des ancrages spatiaux avec le SDK Meta XR Core, vous activez le partage à l’aide d’une solution réseau tierce. Dans notre documentation et nos exemples pour Unity, vous pouvez utiliser Photon Unity Networking. Consultez Activation du mode multijoueur pour plus d’informations sur les recommandations et les références en matière de création d’expériences multijoueurs pour Meta Quest.
La section Fonctionnement des ancrages SSA ci-dessous décrit comment les ancrages SSA s’intègrent dans une application multijoueur.
Après avoir lu cette page, vous saurez :
  • Décrire la fonctionnalité des ancrages spatiaux partagés dans un environnement multijoueur.
  • Expliquer la procédure de configuration d’une application pour le partage des ancrages spatiaux.
  • Définir le processus de création, d’enregistrement, de partage et de chargement d’un ancrage spatial à l’aide des méthodes OVRSpatialAnchor.
Si vous pouvez créer l’exemple d’ancrages spatiaux, vous pouvez créer des applications à l’aide de la fonctionnalité SSA. Nous vous recommandons le tutoriel sur les bases des ancrages spatiaux et la présentation de l’exemple d’ancrages spatiaux partagés pour une expérience pratique des ancrages spatiaux avant d’utiliser les ancrages spatiaux partagés.

Présentation du partage et du chargement des ancrages spatiaux basés sur le groupe par rapport à ceux basés sur l’utilisateur ou l’utilisatrice

À partir de la version 71, le partage et le chargement des ancrages spatiaux sont basés sur les groupes plutôt que sur les utilisateur·ices.
Voici quelques différences clés entre le partage et le chargement des ancrages basés sur le groupe et basés sur l’utilisateur ou l’utilisatrice :
Partage et chargement des ancrages basés sur le groupe
  • Un moyen de partager et de charger des ancrages en utilisant un UUID de groupe arbitraire
  • Moins de conditions requises que pour le partage basé sur l’utilisateur ou l’utilisatrice
  • Prise en charge assurée dans la version 71 et les versions ultérieures
  • Approche recommandée pour le partage et le chargement des ancrages
Partage et chargement des ancrages basés sur l’utilisateur ou l’utilisatrice
  • Un moyen de partager et de charger des ancrages qui cible l’utilisateur ou l’utilisatrice en particulier en utilisant son identifiant Oculus
  • Nécessite la création d’une application Quest Store afin de demander des autorisations d’accès aux données d’identification et de profil utilisateur ou utilisatrice
  • Davantage de conditions requises que pour la version basée sur le groupe
Concernant le développement Unity, ces deux approches reposent sur des variantes d’OVRSpatialAnchor.ShareAsync() pour partager un ancrage spatial une fois qu’il a été enregistré via OVRSpatialAnchor.SaveAnchorAsync().
Une fois partagés avec succès, soit auprès d’un ID de groupe, soit auprès d’un ensemble d’utilisateurs et d’utilisatrices, les ancrages peuvent être chargés par chaque destinataire via l’appel d’une variante d’OVRSpatialAnchor.LoadUnboundSharedAnchorsAsync().
Lorsqu’un ancrage SSA est chargé par un autre utilisateur ou une autre utilisatrice, il est téléchargé sur son appareil et se comporte alors comme une copie locale de l’ancrage spatial d’origine. Si vous détruisez l’instance d’ancrage, cela n’affecte pas l’ancrage partagé, ni ne modifie l’autorisation de l’utilisateur ou de l’utilisatrice d’y accéder à nouveau à l’avenir.

Fonctions basées sur le groupe

public static OVRTask<OVRResult<OVRAnchor.ShareResult>> ShareAsync(IEnumerable<OVRSpatialAnchor> anchors, Guid groupUuid);

public static OVRTask<OVRResult<OVRAnchor.ShareResult>> ShareAsync(IEnumerable<OVRSpatialAnchor> anchors, IEnumerable<Guid> groupUuids);

public static OVRTask<OVRResult<List<UnboundAnchor>, OperationResult>> LoadUnboundSharedAnchorsAsync(Guid groupUuid, List<UnboundAnchor> unboundAnchors)

Premiers pas avec le partage et le chargement des ancrages spatiaux basés sur le groupe

Use the Colocation building block for Colocation Discovery
À partir de la version 74, vous pouvez utiliser le Bloc de création de colocalisation tout en activant l’option « Use Colocation Session » (Utiliser la session de colocalisation). Ceci utilise la Colocation Discovery API.pour faciliter la communication réseau entre les joueur·ses, telle que le matchmaking et le partage d’ancrage.

Exigences relatives à l’appareil

Services spatiaux améliorés

Pour activer les services spatiaux améliorés sur votre appareil Meta Quest, accédez à Settings > Privacy and Safety > Device Permissions (Paramètres > Confidentialité et sécurité > Autorisations de l’appareil), puis sélectionnez Enhanced Spatial Services (Services spatiaux améliorés).
Votre application peut détecter si ce paramètre est désactivé et demander aux utilisateurs et utilisatrices de l’activer. Si l’utilisateur ou l’utilisatrice n’a pas activé les services spatiaux améliorés, votre application recevra le code d’erreur OVRSpatialAnchor.OperationResult.Failure_SpaceCloudStorageDisabled si vous le partagez (ShareAsync) et si d’autres utilisateurs et utilisatrices essaient de le charger (LoadSharedAnchorsAsync).

Activation des ancrages spatiaux partagés

Ajout de l’autorisation OVRManager

Dans votre OVRCameraRig, ouvrez l’inspecteur Unity, puis activez Shared Spatial Anchors (Ancrages spatiaux partagés) et Passthrough (Caméra réelle) dans la section des fonctionnalités Quest d’OVRManager.
Set up the OVRCameraRig for shared spatial anchors

Méthode alternative : ajout d’une autorisation en utilisant le manifeste Android

Au lieu d’activer l’autorisation via OVRManager, vous pouvez activer les ancrages spatiaux partagés en ajoutant des autorisations via le manifeste Android.
Pour mettre à jour le manifeste de votre projet afin de prendre en charge les ancrages SSA dans l’éditeur Unity, allez dans Meta > Tools (Meta > Outils) et sélectionnez Create store-compatible AndroidManifest.xml (Créer un manifeste Android compatible avec le magasin).
Pour garantir le fonctionnement des ancrages SSA et du mode Caméra réelle, les autorisations suivantes sont requises :
<uses-permission android:name=”com.oculus.permission.USE_ANCHOR_API” />
<uses-permission android:name=”com.oculus.permission.IMPORT_EXPORT_IOT_MAP_DATA” android:required=”false” />
<uses-feature android:name=”com.oculus.feature.PASSTHROUGH” android:required=”true” />

Explication du partage et du chargement basés sur les groupes

Le partage basé sur les groupes simplifie la logique de l’application de deux manières :
  1. Le joueur ou la joueuse qui partage les ancrages spatiaux n’a pas besoin de garder la trace des identifiants utilisateur ou utilisatrice avec lesquels effectuer le partage. Au lieu de cela, il est possible d’effectuer le partage via un identifiant de groupe unique auquel tous les clients peuvent faire référence.
  2. Il n’est plus nécessaire de gérer une liste d’identifiants d’ancrage uniques à charger, car l’identifiant de groupe peut servir à rechercher l’ensemble complet des ancrages déjà partagés avec le groupe.
Avant le partage d’un ancrage SSA avec un groupe, l’une des personnes participant doit créer un UUID unique représentant le groupe et le communiquer aux autres. La communication peut se faire soit via une connexion réseau gérée par l’application, soit via Colocation Discovery, ce qui réduit considérablement les efforts engagés par les utilisateur·ices finaux·ales lors de la configuration d’expériences colocalisées. Une fois l’identifiant de groupe créé puis propagé, un joueur ou une joueuse souhaitant partager un ancrage spatial déjà enregistré doit appeler :
// Share multiple anchors with a group
public static OVRTask<OperationResult> ShareAsync(
    IEnumerable<OVRSpatialAnchor> anchors,
    Guid groupUuid);
Les destinataires doivent alors appeler cette méthode pour charger tous les ancrages spatiaux partagés avec le groupe :
public static OVRTask<OVRResult<List<UnboundAnchor>, OperationResult>> LoadUnboundSharedAnchorsAsync(
    Guid groupUuid,
    List<UnboundAnchor> unboundAnchors)
Chaque ancrage non lié devra être localisé avant de pouvoir être utilisé, comme décrit ici.
Au fur et à mesure que d’autres ancrages sont partagés avec un groupe, l’application doit signaler à chaque client la nécessité de recharger les ancrages du groupe. Néanmoins, il n’est pas nécessaire de communiquer les identifiants des ancrages individuels à chaque client.

Fonctions basées sur l’utilisateur ou l’utilisatrice

public OVRTask<OperationResult> ShareAsync(OVRSpaceUser user);

public OVRTask<OperationResult> ShareAsync(OVRSpaceUser user1, OVRSpaceUser user2);

public OVRTask<OperationResult> ShareAsync(OVRSpaceUser user1, OVRSpaceUser user2, OVRSpaceUser user3);

public OVRTask<OperationResult> ShareAsync(OVRSpaceUser user1, OVRSpaceUser user2, OVRSpaceUser user3, OVRSpaceUser user4);

public OVRTask<OperationResult> ShareAsync(IEnumerable<OVRSpaceUser> users);

public static OVRTask<OperationResult> ShareAsync(IEnumerable<OVRSpatialAnchor> anchors, IEnumerable<OVRSpaceUser> users);

public static OVRTask<OVRResult<List<UnboundAnchor>, OVRAnchor.FetchResult>> LoadUnboundAnchorsAsync(IEnumerable<Guid> uuids, List<UnboundAnchor> unboundAnchors, Action<List<UnboundAnchor>, int> onIncrementalResultsAvailable = null);

public static OVRTask<OVRResult<List<UnboundAnchor>, OperationResult>> LoadUnboundSharedAnchorsAsync(IEnumerable<Guid> uuids, List<UnboundAnchor> unboundAnchors)

Activation des ancrages spatiaux partagés

Activer les services spatiaux améliorés

Pour activer les services spatiaux améliorés dans l’éditeur Unity, accédez à Settings > Privacy and Safety > Device Permissions (Paramètres > Confidentialité et sécurité > Autorisations de l’appareil), puis sélectionnez Enhanced Spatial Services (Services spatiaux améliorés).
Votre application peut détecter si ce paramètre est désactivé et demander aux utilisateurs et utilisatrices de l’activer. Si l’utilisateur ou l’utilisatrice n’a pas activé les services spatiaux améliorés, votre application recevra le code d’erreur OVRSpatialAnchor.OperationResult.Failure_SpaceCloudStorageDisabled si vous le partagez (ShareAsync) et si d’autres utilisateurs et utilisatrices essaient de le charger (LoadSharedAnchorsAsync).

Ajout de l’autorisation OVRManager

Sélectionnez votre OVRCameraRig dans la hiérarchie de l’éditeur Unity, accédez à l’inspecteur Unity, puis dans la section Quest Features (Fonctionnalités Quest) d’OVRManager, activez Shared Spatial Anchors (Ancrages spatiaux partagés) et Passthrough (Caméra réelle).
Set up the OVRCameraRig for shared spatial anchors

Méthode alternative : ajout d’une autorisation en utilisant le manifeste Android

Au lieu d’activer l’autorisation via OVRManager, vous pouvez activer les ancrages spatiaux partagés en ajoutant des autorisations via le manifeste Android.
Pour mettre à jour le manifeste de votre projet afin de prendre en charge les ancrages SSA dans l’éditeur Unity, allez dans Meta > Tools (Meta > Outils) et sélectionnez Create store-compatible AndroidManifest.xml (Créer un manifeste Android compatible avec le magasin).
Pour garantir le fonctionnement des ancrages SSA et du mode Caméra réelle, les autorisations suivantes sont requises :
<uses-permission android:name=”com.oculus.permission.USE_ANCHOR_API” />
<uses-permission android:name=”com.oculus.permission.IMPORT_EXPORT_IOT_MAP_DATA” android:required=”false” />
<uses-feature android:name=”com.oculus.feature.PASSTHROUGH” android:required=”true” />

Configurations

En outre, pour garantir le fonctionnement des ancrages spatiaux partagés durant la phase de développement, l’une des conditions suivantes doit être vraie :

Activation des fonctionnalités Identifiant utilisateur·ice et Profil utilisateur·ice dans Contrôle de l’utilisation des données

Remarque : cette section n’est requise que si vous partagez un ancrage spatial en utilisant les ID Oculus. Elle ne l’est pas si vous partagez un ancrage spatial en utilisant un UUID de groupe.
Lorsque vous créez votre application, choisissez Meta Horizon Store. Si vous utilisez Link pour exécuter l’application à partir de votre PC, répétez ces étapes pour créer également une application PCVR.
Vous devez effectuer un contrôle de l’utilisation des données sur chacune de vos applications. Pour activer la persistance des ancrages spatiaux :
  1. Obtenez l’accès admin à votre application si vous ne l’avez pas déjà.
  2. Connectez-vous au Tableau de bord développeur(se) Meta Horizon.
  3. Sélectionnez votre application.
  4. Dans le volet de navigation de gauche, cliquez sur Conditions requises > Contrôle de l’utilisation des données.
  5. Ajoutez les fonctionnalités de plateforme ID utilisateur et Profil utilisateur, puis soumettez la demande.
Pour plus d’informations sur la façon de créer votre application, consultez la page Création et gestion d’applications.

Explication du partage et du chargement basés sur l’utilisateur ou l’utilisatrice

Avec l’approche basée sur l’utilisateur·ice pour le partage des ancrages spatiaux (SSA), les clients qui doivent partager des ancrages spatiaux le font avec des utilisateur·ices spécifiques en précisant leur ID utilisateur·ice spécifique à une application, lequel est mis à disposition de chaque client via OculusPlatform.Users.GetLoggedInUserID(). En outre, les identifiants uniques pour tous les ancrages partagés doivent être communiqués à tous les destinataires. Le code de l’application est chargé de communiquer ces identifiants utilisateur·ice et ces identifiants d’ancrage à tous les clients colocalisés.
Une fois que tous les identifiants utilisateur·ice sont communiqués à la personne effectuant le partage, celle-ci peut partager un ancrage spatial enregistré au préalable en appelant :
// Share multiple anchors with a group
public static OVRTask<OperationResult> ShareAsync(
    IEnumerable<OVRSpatialAnchor> anchors,
    IEnumerable<OVRSpaceUser> users);
Les destinataires devraient alors appeler cette méthode pour charger tous les ancrages spatiaux partagés avec le groupe :
public static OVRTask<OVRResult<List<UnboundAnchor>, OperationResult>> LoadUnboundSharedAnchorsAsync(
    IEnumerable<Guid> uuids,
    List<UnboundAnchor> unboundAnchors)
Chaque ancrage non lié devra être localisé avant de pouvoir être utilisé, comme décrit ici.
Au fur et à mesure que plus d’utilisateur·ices rejoignent ou quittent une expérience et que plus d’ancrages sont partagés, l’application doit communiquer ces changements à tous les clients et leur signaler lorsqu’un nouveau partage d’ancrage a lieu.

Implémentation

Le partage des ancrages spatiaux entre les joueur·ses implique un environnement multijoueur. Pour cette description, consultez Photon Unity Networking, car c’est cette solution que notre exemple d’ancrages spatiaux partagés Unity utilise.
Globalement, le processus d’intégration des ancrages SSA dans votre application est le suivant :
  1. Pour connecter les utilisateurs et utilisatrices les un·es avec les autres, créez un salon en utilisant la solution réseau. Invitez les utilisateurs et utilisatrices à rejoindre ce salon, via l’adhésion, le tableau d’activité ou une invitation. Par exemple, les fonctions de matchmaking et de lobby de Photon peuvent vous y aider.
  2. Créez un ancrage en instanciant un objet qui contient le composant OVRSpatialAnchor.
  3. Enregistrez l’ancrage en utilisant OVRSpatialAnchor.SaveAnchorAsync(), puis patientez le temps que l’appel prenne fin avant de partager l’ancrage.
  4. Partagez l’ancrage avec un ensemble d’utilisateurs et d’utilisatrices en utilisant OVRSpatialAnchor.ShareAsync() pour la totalité des joueurs et joueuses du salon. Les autres joueur·ses peuvent charger l’ancrage SSA dès la fin de cet appel.
  5. Diffusez l’UUID de l’ancrage. Par exemple, diffusez l’UUID de l’ancrage SSA à l’ensemble des joueurs et joueuses du salon en utilisant la solution réseau.
  6. Chargez l’ancrage. Chaque joueur·se peut à présent charger l’ancrage à partir de l’UUID obtenu à l’étape ci-dessus en utilisant OVRSpatialAnchor.LoadUnboundSharedAnchorsAsync().
  7. Tous les joueurs et toutes les joueuses peuvent désormais utiliser l’ancrage comme cadre de coordonnées partagées, ou origine.

Fonctionnement des ancrages SSA

Lorsque vous partagez un ancrage spatial, vous partagez ses données de nuage de points et spécifiez les identifiants utilisateur·ice ou l’identifiant de groupe autorisés à le charger.
Remarque : quelle que soit votre solution réseau, l’ensemble des utilisateurs et utilisatrices ou des groupes avec lesquels vous prévoyez de partager un ancrage spatial doit activer les services spatiaux améliorés dans votre application. C’est ce qui leur donne accès aux ancrages qui sont partagés avec eux.

Enregistrement d’un ancrage SSA

Avant de partager un ancrage spatial, vous devez d’abord l’enregistrer. Vous pouvez utiliser la méthode OVRSpatialAnchorSaveAnchorAsync(). Cette méthode est asynchrone.

Renvoi

ShareAsync renvoie un objet de type tâche pouvant être attendu sur lequel vous pouvez utiliser await ou un rappel à l’aide de ContinueWith. Consultez Tâches asynchrones pour plus de détails sur la programmation basée sur les tâches dans le SDK Meta XR Core.
Le résultat OperationResult de la tâche peut être utilisé pour déterminer si le partage a abouti et l’action à mener si ce n’est pas le cas.
Le paramètre users spécifie une collection d’objets OVRSpaceUser pour les utilisateurs et utilisatrices avec lesquels vous souhaitez partager des ancrages. Lorsque l’appel à ShareAsync() aboutit, les ancrages SSA sont disponibles pour les utilisateurs et utilisatrices.

Exemple

public async void ShareExample(
    OVRSpatialAnchor spatialAnchor,
    IEnumerable<OVRSpaceUser> users)
{
    var result = await spatialAnchor.ShareAsync(users);
    if (result.IsSuccess())
    {
        BroadcastUuidToUsers(spatialAnchor.Uuid);
        return;
    }

    switch (result)
    {
        case OVRSpatialAnchor.OperationResult.Failure_SpaceNetworkRequestFailed:
        {
            // Unable to reach Meta servers.
            // Instruct user to check internet connection
            break;
        }
        case OVRSpatialAnchor.OperationResult.Failure_SpaceCloudStorageDisabled:
        {
            // inform user to turn on Enhanced Spatial Services
            // Settings > Privacy and Safety > Device Permissions > Turn on "Enhanced Spatial Services"
            break;
        }
        // ...
    }
}

Objet OVRSpaceUser

Vous devez indiquer l’ensemble d’utilisateur·ices avec lequel vous souhaitez partager les ancrages. Pour cela, créez un OVRSpaceUser à partir de l’ID Meta Quest de chaque utilisateur ou utilisatrice (identifiant ulong).
var users = new OVRSpaceUser[]
{
    new OVRSpaceUser(userId1),
    new OVRSpaceUser(userId2),
};

ShareExample(anchor, users);
Consultez la section Utilisateur·ices, ami·es et contacts pour savoir comment récupérer des informations sur l’utilisateur·ice actuel·le et ses ami·es.

Exemple

Cet extrait présente le partage d’ancrages spatiaux avec un ensemble d’utilisateurs et d’utilisatrices.
async void ShareExample(OVRSpatialAnchor anchor, OVRSpaceUser[] users)
{
    var shareResult = await anchor.ShareAsync(users);
    if (shareResult.IsError())
    {
        Debug.LogError($"Sharing failed with {shareResult}");
        return;
    }

    Debug.Log($"Anchor {anchor.Uuid} shared with {users.Length} users.");
}

Problèmes connus

Certains problèmes connus empêchent la localisation correcte d’un ancrage spatial partagé. La suite de cet article aborde ces problèmes et les moyens de les atténuer.
Problème 1 :
  • Étapes à reproduire
    • Hôte : appelle ShareAsync
    • Hôte : quitte l’application
    • Hôte : ne déplace pas de manière significative son appareil Quest
    • Hôte : rouvre l’application
    • Hôte : appelle ShareAsync
    • Invité : appelle LoadUnboundSharedAnchorsAsync
    • Invité : peut observer un ancrage spatial partagé qui ne se charge pas au bon endroit
  • Résolution
    • Si l’hôte quitte l’application, il doit déplacer son appareil Quest.
Problème 2 :
Il se peut qu’un trop grand nombre d’ancrages soient stockés sur l’appareil de l’invité.
  • Résolution
    • Accédez à Paramètres > Confidentialité > Effacer l’historique de l’espace physique.

Exemple d’ancrage SSA et présentation

Deux exemples illustrant l’utilisation des ancrages SSA sont disponibles. Les deux sont disponibles dans le dépôt GitHub oculus-samples. Ces deux applications utilisent Photon Unity Networking pour partager les données des joueur·ses.
  • L’application de démonstration Unity-SharedSpatialAnchors est une application éprouvée qui présente l’implémentation d’ancrages spatiaux partagés et permet aux utilisateur·ices d’interagir avec des objets en réseau dans un espace en colocation. La page Exemple d’ancrages spatiaux partagés fournit une documentation sur la procédure de création et d’utilisation de l’exemple.
  • L’application de démonstration Unity-Discover est une application plus récente avec moins de fonctionnalités qui montre comment utiliser efficacement un seul ancrage SSA dans une application multifonction. Pour comprendre comment la fonctionnalité SSA est implémentée, consultez Présentation des ancrages spatiaux partagés (SSA)

En savoir plus

Pour en savoir plus sur les ancrages spatiaux, consultez ces pages :
Vous trouverez d’autres exemples d’utilisation des ancrages spatiaux avec Meta Quest dans le dépôt GitHub oculus-samples :
Pour vous lancer dans le développement d’applications Meta Quest dans Unity, consultez la page Démarrer le développement Meta Quest dans Unity
Logo nav.
Français (France)
©2026 Meta