Table of Contents

Control del flujo de AR Session

Este documento presenta el control del flujo de AR Session, incluido cómo crear, iniciar, detener y destruir AR Session.

Antes de comenzar

Crear

Use el appId de la biblioteca de cloud localization, el serverAddress de cloud service, apiKey y apiSecret de la configuración para crear APIKeyAccessData.

Después use el APIKeyAccessData creado para crear MegaTrackerConfigs.

Luego use MegaTrackerConfigs y el licenseKey de la configuración para crear SessionConfigs.

Finalmente, cree la session con el método createSession(sessionConfigs) de EasyARMegaComponent montado en la escena xr-frame.

createSession() {
    // obtiene el megaComponent montado en la escena
    const megaElement = scene.getElementById('easyar-mega');
    const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
    // configuracion de autenticacion del servicio en la nube MegaTracker
    const apiKeyAccess = new mega.APIKeyAccessData(this.data.appId, this.data.serverAddress, this.data.apiKey, this.data.apiSecret);
    const megaTrackerConfigs: easyar.MegaTrackerConfigs = {
        access: apiKeyAccess
    }
    // configuracion de Session
    const sessionConfigs: easyar.SessionConfigs = {
        megaTrackerConfigs: megaTrackerConfigs,
        licenseKey: settings.EasyARLicenseKey
    }
    // crea una instancia
    session = megaComponent.createSession(sessionConfigs);
}

Este código muestra cómo obtener megaComponent desde la escena y luego usar la configuración para crear una instancia de session.

Precaución

Límite de instancia única: solo se permite una instancia de Session en una escena. Antes de crear una nueva Session, debe asegurarse de haber llamado a closeSession() para destruir la instancia antigua; de lo contrario, la creación fallará.

Iniciar

Normalmente, en el callback donde el sistema AR de xr-frame está listo, use el método start(options) de EasyARSession para iniciar la session.

Advertencia

MegaTracker depende de los datos proporcionados por el planar AR tracker y no puede funcionar antes de que el planar tracker termine de inicializarse.

En WXML, use bind:ready="handleReady" para registrar el evento de sistema AR listo:

<xr-scene ar-system="modes:Plane; planeMode: 1" bind:ready="handleReady">

En la función callback handleReady del componente xr-frame, use el método start(options) de EasyARSession para iniciar la session.

handleReady: function(event) {
    try {
        //inicia Session; por defecto reintenta 5 veces si falla
        await session.start();
    } catch (err) {
        console.error(`EasyAR Session initialization failed: ${err.message}`);
        return;
    }
}

Detener y destruir

Use el método closeSession() de EasyARMegaComponent montado en la escena xr-frame para destruir la session.

Se recomienda llamarlo en el lifecycle detached del componente xr-frame para garantizar que se destruya al salir de la página, es decir, cuando la instancia del componente se elimina del árbol de nodos de la página.

lifetimes: {
    detached: function() {
        const megaElement = scene.getElementById('easyar-mega');
        const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
        megaComponent.closeSession();
    }
}

Cambio entre foreground y background

Cuando la página pasa a background, use el método pause() de EasyARSession para pausar la session. Cuando la página vuelve a foreground, use el método resume() de EasyARSession para reanudar la session.

/** llamada de la pagina del miniprograma*/
onHide() {
    if (this.ar) {
        this.ar.pauseSession();
    }
},
onShow() {
    if (this.ar) {
        this.ar.resumeSession();
    }
}
/** funcion del 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();
}

En este código, el componente xr-frame expone las dos funciones pauseSession() y resumeSession().

En la página Mini Program, llame a pauseSession() en onHide, es decir, cuando el Mini Program pasa de foreground a background, para pausar la session.

Llame a resumeSession() en onShow, es decir, cuando el Mini Program vuelve de background a foreground, para reanudar la session.