Table of Contents

Контроль процесса AR-сессии

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

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

Создание

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

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

Затем используйте MegaTrackerConfigs и licenseKey из конфигурации для создания SessionConfigs.

Наконец, используйте метод 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
    }
    // Конфигурация сессии
    const sessionConfigs: easyar.SessionConfigs = {
        megaTrackerConfigs: megaTrackerConfigs,
        licenseKey: settings.EasyARLicenseKey
    }
    // Создание экземпляра
    session = megaComponent.createSession(sessionConfigs);
}

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

Осторожно

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

Запуск

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

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

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

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

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

В функции обратного вызова handleReady компонента xr-frame используйте метод start(options) класса EasyARSession для запуска сессии.

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

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

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

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

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

Переключение между передним и задним планом

При переходе страницы в фоновый режим используйте метод pause() класса EasyARSession для приостановки сессии. При возврате страницы на передний план используйте метод resume() класса EasyARSession для возобновления сессии.

/** Вызов на странице мини-программы*/
onHide() {
    if (this.ar) {
        this.ar.pauseSession();
    }
},
onShow() {
    if (this.ar) {
        this.ar.resumeSession();
    }
}
/** Функция в компоненте xr-frame*/
pauseSession(): void {
    if (!session) { console.error("EasyAR Session не готова"); return;}
    session.pause();
},
resumeSession(): void {
    if (!session) { console.error("EasyAR Session не готова"); return;}
    session.resume();
}

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

На странице мини-программы в onHide (когда мини-программа переходит с переднего плана на задний) вызывается pauseSession() для приостановки сессии.

В onShow (когда мини-программа возвращается с заднего плана на передний) вызывается resumeSession() для возобновления сессии.