AR Session 플로우 제어
이 문서에서는 AR Session을 생성, 시작, 중지 및 종료하는 방법을 포함한 AR Session 플로우 제어를 소개합니다.
시작하기 전에
- AR Session 개념 및 플로우 이해하기
생성
구성에서 클라우드 위치 라이브러리 appId, 클라우드 서비스 serverAddress, 클라우드 서비스 apiKey 및 apiSecret을 사용하여 APIKeyAccessData를 생성합니다.
그런 다음 생성된 APIKeyAccessData을 사용하여 MegaTrackerConfigs를 생성합니다.
MegaTrackerConfigs와 구성의 licenseKey를 사용하여 SessionConfigs를 생성합니다.
최종적으로 xr-frame 장면에 연결된 EasyARMegaComponent의 createSession(sessionConfigs) 메서드를 사용하여 세션을 생성합니다.
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을 생성하기 전에 반드시 closeSession()를 호출하여 이전 인스턴스를 종료했는지 확인해야 하며, 그렇지 않으면 생성이 실패합니다.
시작
일반적으로 xr-frame의 AR 시스템 준비 완료 콜백에서 EasyARSession의 start(options) 메서드를 사용하여 세션을 시작합니다.
경고
MegaTracker는 평면 AR 트래커가 제공하는 데이터에 의존하며, 평면 트래커 초기화가 완료되기 전에는 작동하지 않습니다.
WXML에서 bind:ready="handleReady"를 사용하여 AR 시스템 준비 완료 이벤트를 등록합니다:
<xr-scene ar-system="modes:Plane; planeMode: 1" bind:ready="handleReady">
xr-frame 컴포넌트의 콜백 함수 handleReady에서 EasyARSession의 start(options) 메서드를 사용하여 세션을 시작합니다.
handleReady: function(event) {
try {
//Session 시작, 기본적으로 5회 재시도
await session.start();
} catch (err) {
console.error(`EasyAR Session 초기화 실패: ${err.message}`);
return;
}
}
중지 및 종료
xr-frame 장면에 연결된 EasyARMegaComponent의 closeSession() 메서드를 사용하여 세션을 종료합니다.
페이지를 떠날 때(즉, 컴포넌트 인스턴스가 페이지 노드 트리에서 제거될 때) 종료되도록 보장하기 위해 xr-frame 컴포넌트 수명 주기의 detached에서 호출하는 것이 좋습니다.
lifetimes: {
detached: function() {
const megaElement = scene.getElementById('easyar-mega');
const megaComponent = megaElement.getComponent("easyar-mega") as easyar.EasyARMegaComponent;
megaComponent.closeSession();
}
}
포그라운드/백그라운드 전환
페이지가 백그라운드로 전환될 때 EasyARSession의 pause() 메서드를 사용하여 세션을 일시 중지합니다. 페이지가 포그라운드로 돌아올 때 EasyARSession의 resume() 메서드를 사용하여 세션을 재개합니다.
/** 미니프로그램 페이지 호출*/
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()을 호출하여 세션을 재개합니다.