Table of Contents

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

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 megaComponent dalla 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() e resumeSession().

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.