Controllo del flusso AR Session
Questo documento introduce il controllo del flusso AR Session, incluso come creare, avviare, arrestare e distruggere AR Session.
Prima di iniziare
- Comprendere il concetto e il flusso di AR Session
Creazione
Usare appId della cloud localization library, serverAddress del cloud service, apiKey e apiSecret nella configurazione per creare APIKeyAccessData.
Poi usare il APIKeyAccessData creato per creare MegaTrackerConfigs.
Quindi usare MegaTrackerConfigs e il licenseKey nella configurazione per creare SessionConfigs.
Infine, usare il metodo createSession(sessionConfigs) di EasyARMegaComponent montato nella scena xr-frame per creare la session.
createSession() {
// ottieni il megaComponent montato nella scena
const megaElement = scene.getElementById('easyar-mega');
const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
// configurazione di autenticazione del servizio 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
}
// configurazione di Session
const sessionConfigs: easyar.SessionConfigs = {
megaTrackerConfigs: megaTrackerConfigs,
licenseKey: settings.EasyARLicenseKey
}
// crea un istanza
session = megaComponent.createSession(sessionConfigs);
}
Questo codice mostra come ottenere
megaComponentdalla scena e poi usare la configurazione per creare un'istanza session.
Attenzione
Limite di singola istanza: in una scena è consentita una sola istanza Session. Prima di creare una nuova Session, assicurarsi di aver chiamato closeSession() per distruggere la vecchia istanza, altrimenti la creazione fallirà.
Avvio
Di solito, nel callback in cui il sistema AR di xr-frame è pronto, usare il metodo start(options) di EasyARSession per avviare la session.
Avvertenza
MegaTracker dipende dai dati forniti dal planar AR tracker e non può funzionare prima che l'inizializzazione del planar tracker sia completata.
In WXML, usare bind:ready="handleReady" per registrare l'evento di sistema AR pronto:
<xr-scene ar-system="modes:Plane; planeMode: 1" bind:ready="handleReady">
Nel callback handleReady del componente xr-frame, usare il metodo start(options) di EasyARSession per avviare la session.
handleReady: function(event) {
try {
//avvia Session; per impostazione predefinita ritenta 5 volte in caso di errore
await session.start();
} catch (err) {
console.error(`EasyAR Session initialization failed: ${err.message}`);
return;
}
}
Arresto e distruzione
Usare il metodo closeSession() di EasyARMegaComponent montato nella scena xr-frame per distruggere la session.
Si consiglia di chiamarlo nel lifecycle detached del componente xr-frame per garantire la distruzione quando si lascia la pagina, cioè quando l'istanza del componente viene rimossa dall'albero dei nodi della pagina.
lifetimes: {
detached: function() {
const megaElement = scene.getElementById('easyar-mega');
const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
megaComponent.closeSession();
}
}
Passaggio tra foreground e background
Quando la pagina passa in background, usare il metodo pause() di EasyARSession per mettere in pausa la session. Quando la pagina torna in foreground, usare il metodo resume() di EasyARSession per riprendere la session.
/** chiamata della pagina Mini Program*/
onHide() {
if (this.ar) {
this.ar.pauseSession();
}
},
onShow() {
if (this.ar) {
this.ar.resumeSession();
}
}
/** funzione nel componente 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();
}
In questo codice, il componente xr-frame espone le due funzioni
pauseSession()eresumeSession().Nella pagina Mini Program, chiamare
pauseSession()in onHide, cioè quando il Mini Program passa da foreground a background, per mettere in pausa la session.Chiamare
resumeSession()in onShow, cioè quando il Mini Program torna da background a foreground, per riprendere la session.