Table of Contents

AR Session 플로우 제어

이 문서에서는 AR Session을 생성, 시작, 중지 및 종료하는 방법을 포함한 AR Session 플로우 제어를 소개합니다.

시작하기 전에

생성

구성에서 클라우드 위치 라이브러리 appId, 클라우드 서비스 serverAddress, 클라우드 서비스 apiKeyapiSecret을 사용하여 APIKeyAccessData를 생성합니다.

그런 다음 생성된 APIKeyAccessData을 사용하여 MegaTrackerConfigs를 생성합니다.

MegaTrackerConfigs와 구성의 licenseKey를 사용하여 SessionConfigs를 생성합니다.

최종적으로 xr-frame 장면에 연결된 EasyARMegaComponentcreateSession(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 시스템 준비 완료 콜백에서 EasyARSessionstart(options) 메서드를 사용하여 세션을 시작합니다.

경고

MegaTracker는 평면 AR 트래커가 제공하는 데이터에 의존하며, 평면 트래커 초기화가 완료되기 전에는 작동하지 않습니다.

WXML에서 bind:ready="handleReady"를 사용하여 AR 시스템 준비 완료 이벤트를 등록합니다:

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

xr-frame 컴포넌트의 콜백 함수 handleReady에서 EasyARSessionstart(options) 메서드를 사용하여 세션을 시작합니다.

handleReady: function(event) {
    try {
        //Session 시작, 기본적으로 5회 재시도
        await session.start();
    } catch (err) {
        console.error(`EasyAR Session 초기화 실패: ${err.message}`);
        return;
    }
}

중지 및 종료

xr-frame 장면에 연결된 EasyARMegaComponentcloseSession() 메서드를 사용하여 세션을 종료합니다.

페이지를 떠날 때(즉, 컴포넌트 인스턴스가 페이지 노드 트리에서 제거될 때) 종료되도록 보장하기 위해 xr-frame 컴포넌트 수명 주기의 detached에서 호출하는 것이 좋습니다.

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

포그라운드/백그라운드 전환

페이지가 백그라운드로 전환될 때 EasyARSessionpause() 메서드를 사용하여 세션을 일시 중지합니다. 페이지가 포그라운드로 돌아올 때 EasyARSessionresume() 메서드를 사용하여 세션을 재개합니다.

/** 미니프로그램 페이지 호출*/
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()을 호출하여 세션을 재개합니다.