Ablaufsteuerung der AR Session
Dieses Dokument beschreibt die Ablaufsteuerung der AR Session, einschließlich Erstellen, Starten, Stoppen und Zerstören der AR Session.
Bevor Sie beginnen
- Verstehen Sie Konzept und Ablauf der AR Session
Erstellen
Verwenden Sie die cloud localization library appId, den cloud service serverAddress, den cloud service apiKey und apiSecret aus der Konfiguration, um APIKeyAccessData zu erstellen.
Verwenden Sie anschließend das erstellte APIKeyAccessData, um MegaTrackerConfigs zu erstellen.
Verwenden Sie dann MegaTrackerConfigs und den licenseKey aus der Konfiguration, um SessionConfigs zu erstellen.
Erstellen Sie schließlich die session mit der Methode createSession(sessionConfigs) von EasyARMegaComponent, das in der xr-frame-Szene eingebunden ist.
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);
}
Dieser Code zeigt, wie
megaComponentaus der Szene abgerufen und anschließend mit der Konfiguration eine session-Instanz erstellt wird.
Vorsicht
Einzelinstanz-Beschränkung: In einer Szene darf nur eine Session-Instanz existieren. Vor dem Erstellen einer neuen Session müssen Sie sicherstellen, dass closeSession() aufgerufen wurde, um die alte Instanz zu zerstören, andernfalls schlägt das Erstellen fehl.
Starten
Üblicherweise wird im Callback, in dem das AR-System von xr-frame bereit ist, die Methode start(options) von EasyARSession verwendet, um die session zu starten.
Warnung
MegaTracker hängt von den Daten ab, die der planar AR tracker bereitstellt, und kann nicht arbeiten, bevor der planar tracker initialisiert ist.
Registrieren Sie in WXML mit bind:ready="handleReady" das Ereignis, dass das AR-System bereit ist:
<xr-scene ar-system="modes:Plane; planeMode: 1" bind:ready="handleReady">
Verwenden Sie in der Callback-Funktion handleReady der xr-frame-Komponente die Methode start(options) von EasyARSession, um die session zu starten.
handleReady: function(event) {
try {
//启动 Session,默认失败重试 5 次
await session.start();
} catch (err) {
console.error(`EasyAR Session initialization failed: ${err.message}`);
return;
}
}
Stoppen und zerstören
Verwenden Sie die Methode closeSession() von EasyARMegaComponent, das in der xr-frame-Szene eingebunden ist, um die session zu zerstören.
Es wird empfohlen, sie im lifecycle detached der xr-frame-Komponente aufzurufen, um sicherzustellen, dass sie beim Verlassen der Seite zerstört wird, also wenn die Komponenteninstanz aus dem Knotebaum der Seite entfernt wird.
lifetimes: {
detached: function() {
const megaElement = scene.getElementById('easyar-mega');
const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
megaComponent.closeSession();
}
}
Wechsel zwischen foreground und background
Wenn die Seite in den background geht, verwenden Sie die Methode pause() von EasyARSession, um die session anzuhalten. Wenn die Seite in den foreground zurückkehrt, verwenden Sie die Methode resume() von EasyARSession, um die session fortzusetzen.
/** 小程序页面的调用*/
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();
}
In diesem Code stellt die xr-frame-Komponente die beiden Funktionen
pauseSession()undresumeSession()bereit.Rufen Sie auf der Mini Program-Seite in onHide, also wenn das Mini Program vom foreground in den background wechselt,
pauseSession()auf, um die session anzuhalten.Rufen Sie in onShow, also wenn das Mini Program vom background in den foreground zurückkehrt,
resumeSession()auf, um die session fortzusetzen.