Table of Contents

Управление процессом AR Session

Этот документ описывает управление процессом AR Session, включая создание, запуск, остановку и уничтожение AR Session.

Перед началом

Создание

Используйте appId библиотеки cloud localization, serverAddress cloud service, apiKey и apiSecret из конфигурации, чтобы создать APIKeyAccessData.

Затем используйте созданный APIKeyAccessData для создания MegaTrackerConfigs.

Далее используйте MegaTrackerConfigs и licenseKey из конфигурации, чтобы создать SessionConfigs.

В итоге создайте session с помощью метода createSession(sessionConfigs) компонента EasyARMegaComponent, смонтированного в сцене xr-frame.

createSession() {
    // получите megaComponent, смонтированный в сцене
    const megaElement = scene.getElementById('easyar-mega');
    const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
    // конфигурация аутентификации облачного сервиса MegaTracker
    const apiKeyAccess = new mega.APIKeyAccessData(this.data.appId, this.data.serverAddress, this.data.apiKey, this.data.apiSecret);
    const megaTrackerConfigs: easyar.MegaTrackerConfigs = {
        access: apiKeyAccess
    }
    // конфигурация Session
    const sessionConfigs: easyar.SessionConfigs = {
        megaTrackerConfigs: megaTrackerConfigs,
        licenseKey: settings.EasyARLicenseKey
    }
    // создайте экземпляр
    session = megaComponent.createSession(sessionConfigs);
}

Этот код показывает, как получить megaComponent из сцены и затем создать экземпляр session с использованием конфигурации.

Осторожно

Ограничение одного экземпляра: в одной сцене разрешен только один экземпляр Session. Перед созданием новой Session необходимо убедиться, что closeSession() уже вызван для уничтожения старого экземпляра, иначе создание завершится ошибкой.

Запуск

Обычно session запускается методом start(options) класса EasyARSession в callback, когда AR-система xr-frame готова.

Предупреждение

MegaTracker зависит от данных, предоставляемых planar AR tracker, и не может работать до завершения инициализации planar tracker.

В WXML используйте bind:ready="handleReady" для регистрации события готовности AR-системы:

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

В callback handleReady компонента xr-frame используйте метод start(options) класса EasyARSession, чтобы запустить session.

handleReady: function(event) {
    try {
        //запустите Session; по умолчанию при ошибке выполняется 5 повторных попыток
        await session.start();
    } catch (err) {
        console.error(`EasyAR Session initialization failed: ${err.message}`);
        return;
    }
}

Остановка и уничтожение

Используйте метод closeSession() компонента EasyARMegaComponent, смонтированного в сцене xr-frame, чтобы уничтожить session.

Рекомендуется вызывать его в lifecycle detached компонента xr-frame, чтобы гарантировать уничтожение при выходе со страницы, то есть когда экземпляр компонента удаляется из дерева узлов страницы.

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

Переключение между foreground и background

Когда страница уходит в background, используйте метод pause() класса EasyARSession, чтобы приостановить session. Когда страница возвращается в foreground, используйте метод resume() класса EasyARSession, чтобы возобновить session.

/** вызов страницы Mini Program*/
onHide() {
    if (this.ar) {
        this.ar.pauseSession();
    }
},
onShow() {
    if (this.ar) {
        this.ar.resumeSession();
    }
}
/** функция в компоненте 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();
}

В этом коде компонент xr-frame предоставляет две функции: pauseSession() и resumeSession().

На странице Mini Program вызовите pauseSession() в onHide, то есть когда Mini Program переходит из foreground в background, чтобы приостановить session.

Вызовите resumeSession() в onShow, то есть когда Mini Program возвращается из background в foreground, чтобы возобновить session.