Contrôle du flux AR Session
Ce document présente le contrôle du flux AR Session, notamment comment créer, démarrer, arrêter et détruire AR Session.
Avant de commencer
- Comprenez le concept et le flux d'AR Session
Création
Utilisez le appId de la cloud localization library, le serverAddress du cloud service, apiKey et apiSecret dans la configuration pour créer APIKeyAccessData.
Utilisez ensuite le APIKeyAccessData créé pour créer MegaTrackerConfigs.
Puis utilisez MegaTrackerConfigs et le licenseKey dans la configuration pour créer SessionConfigs.
Enfin, utilisez la méthode createSession(sessionConfigs) de EasyARMegaComponent montée dans la scène xr-frame pour créer la session.
createSession() {
// obtient le megaComponent monte dans la scene
const megaElement = scene.getElementById('easyar-mega');
const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
// configuration d authentification du service cloud MegaTracker
const apiKeyAccess = new mega.APIKeyAccessData(this.data.appId, this.data.serverAddress, this.data.apiKey, this.data.apiSecret);
const megaTrackerConfigs: easyar.MegaTrackerConfigs = {
access: apiKeyAccess
}
// configuration de Session
const sessionConfigs: easyar.SessionConfigs = {
megaTrackerConfigs: megaTrackerConfigs,
licenseKey: settings.EasyARLicenseKey
}
// cree une instance
session = megaComponent.createSession(sessionConfigs);
}
Ce code montre comment obtenir
megaComponentdepuis la scène, puis utiliser la configuration pour créer une instance session.
Attention
Limite d'instance unique: une seule instance Session est autorisée dans une scène. Avant de créer une nouvelle Session, assurez-vous que closeSession() a été appelé pour détruire l'ancienne instance, sinon la création échouera.
Démarrage
En général, dans le callback où le système AR de xr-frame est prêt, utilisez la méthode start(options) de EasyARSession pour démarrer la session.
Avertissement
MegaTracker dépend des données fournies par le planar AR tracker et ne peut pas fonctionner avant la fin de l'initialisation du planar tracker.
Dans WXML, utilisez bind:ready="handleReady" pour enregistrer l'événement indiquant que le système AR est prêt:
<xr-scene ar-system="modes:Plane; planeMode: 1" bind:ready="handleReady">
Dans la fonction callback handleReady du composant xr-frame, utilisez la méthode start(options) de EasyARSession pour démarrer la session.
handleReady: function(event) {
try {
//demarre Session ; par defaut, reessaie 5 fois en cas d echec
await session.start();
} catch (err) {
console.error(`EasyAR Session initialization failed: ${err.message}`);
return;
}
}
Arrêter et détruire
Utilisez la méthode closeSession() de EasyARMegaComponent montée dans la scène xr-frame pour détruire la session.
Il est recommandé de l'appeler dans le lifecycle detached du composant xr-frame, afin de garantir sa destruction lorsque vous quittez la page, c'est-à-dire lorsque l'instance du composant est supprimée de l'arborescence des nœuds de la page.
lifetimes: {
detached: function() {
const megaElement = scene.getElementById('easyar-mega');
const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
megaComponent.closeSession();
}
}
Passage entre foreground et background
Lorsque la page passe en background, utilisez la méthode pause() de EasyARSession pour suspendre la session. Lorsque la page revient en foreground, utilisez la méthode resume() de EasyARSession pour reprendre la session.
/** appel de la page du mini-programme*/
onHide() {
if (this.ar) {
this.ar.pauseSession();
}
},
onShow() {
if (this.ar) {
this.ar.resumeSession();
}
}
/** fonction du composant xr-frame*/
pauseSession(): void {
if (!session) { console.error("EasyAR Session is not ready"); return;}
session.pause();
},
resumeSession(): void {
if (!session) { console.error("EasyAR Session is not ready"); return;}
session.resume();
}
Dans ce code, le composant xr-frame expose deux fonctions:
pauseSession()etresumeSession().Dans la page Mini Program, appelez
pauseSession()dans onHide, c'est-à-dire lorsque le Mini Program passe du foreground au background, pour suspendre la session.Appelez
resumeSession()dans onShow, c'est-à-dire lorsque le Mini Program revient du background au foreground, pour reprendre la session.