Skip to content

Wortal과 Gamesnack SDK 구현을 위한 베스트 프랙티스

이 가이드는 Wortal과 Gamesnack SDK를 통합하는 베스트 프랙티스를 설명합니다. 게임 초기화, 이벤트 처리, 라이프사이클 관리 등을 포함하여 원활하고 신뢰할 수 있는 경험을 제공하기 위한 방법을 안내합니다.


1. 게임 초기화

먼저, 게임은 Wortal이 제대로 초기화되었는지 확인한 후, Wortal.startGameAsync()를 호출해야 합니다. 이 메서드는 Gamesnack SDK의 game.ready를 트리거하며, 게임이 준비 완료로 표시됩니다.

사용 예시

async function initializeWortal(wortalInstance: Wortal) {
    try {
        await wortalInstance.initializeAsync();
        // SDK가 준비 완료되었습니다. 로딩 진행을 100%로 설정하고 게임을 시작합니다.
        wortalInstance.setLoadingProgress(100);
        await wortalInstance.startGameAsync();
        console.log("Wortal이 정상적으로 초기화되었습니다");
    } catch (error) {
        console.error("Wortal 초기화 중 오류 발생:", error);
    }
}

// 사용 예시
const wortalInstance = new Wortal();
initializeWortal(wortalInstance);

중요한 포인트

  • startGameAsync를 호출하기 전에 Wortal이 완전히 초기화되었는지 확인합니다.
  • 초기화 중 오류가 발생할 경우 에러 처리를 사용합니다.

2. 플랫폼 오디오 설정 듣기

게임은 최적의 사용자 경험을 제공하기 위해 GameSnack 플랫폼의 오디오 설정을 따르는 것이 좋습니다. 오디오 상태 변경을 구독하려면 Wortal.session.onAudioStatusChange를 사용하여 게임 오디오를 자동으로 조정합니다.

사용 예시

// 플랫폼의 오디오 설정 변경을 듣고 게임 오디오를 적절히 조정합니다.
Wortal.session.onAudioStatusChange((isAudioEnabled: boolean) => {
    // 플랫폼의 오디오 설정에 따라 배경 음악을 음소거하거나 해제
    BGMManager.muteBGM(!isAudioEnabled);

    // 플랫폼의 오디오 설정에 따라 효과음을 음소거하거나 해제
    SFXManager.muteSFX(!isAudioEnabled);
});

대체 방법

오디오 상태를 수동으로 확인하려면 Wortal.session.isAudioEnabled를 사용할 수 있지만, 오디오 변경을 구독하는 Wortal.session.onAudioStatusChange가 더 적합합니다. 이렇게 하면 오디오 설정이 동기화됩니다.


3. 앱 라이프사이클 이벤트 처리

앱 라이프사이클 이벤트를 처리하려면, 게임이 백그라운드로 전환되거나 포그라운드로 복귀할 때 게임 상태를 관리하는 Wortal.onPause()Wortal.onResume()를 사용합니다.

사용 예시

// 게임 플레이가 일시 정지되었을 때 Wortal.onPause() 호출
function pauseGame() {
    // 게임 플레이나 애니메이션을 일시 정지
    Game.pause();

    // 게임이 일시 정지되었음을 플랫폼에 알림
    Wortal.onPause();
}

// 게임 플레이가 재개되었을 때 Wortal.onResume() 호출
function resumeGame() {
    // 게임 플레이나 애니메이션을 재개
    Game.resume();

    // 게임이 재개되었음을 플랫폼에 알림
    Wortal.onResume();
}

중요한 포인트

  • 게임 플레이가 일시 정지되면 Wortal.onPause()를 호출하여 애니메이션이나 시간에 민감한 로직을 멈춥니다.
  • 게임 플레이가 재개되면 Wortal.onResume()를 호출하여 플레이어가 중단된 지점에서 다시 시작할 수 있도록 하고 일시 정지된 로직을 재개합니다.

4. 게임 이벤트 로그

gameOverlevelComplete와 같은 이벤트를 기록하는 것은 중요합니다. 게임 플레이 결과를 기록하려면 Wortal.analytics.logLevelEnd()를 사용합니다.

사용 예시

// 레벨 실패로 인한 게임 오버
Wortal.analytics.logLevelEnd("1", "100", false);

// 레벨 성공으로 인한 게임 오버
Wortal.analytics.logLevelEnd("1", "100", true);

중요한 포인트

  • 각 게임 플레이 세션이 끝날 때 Wortal.analytics.logLevelEnd()를 호출해야 합니다.
  • 끝나지 않는 게임에서는 더미 레벨 문자열을 사용하고, wasCompleted는 성공 또는 실패를 정확하게 반영해야 합니다.

5. 하이스코어와 진행 상황 업데이트

리더보드와 같은 기능을 활성화하려면, 각 게임 세션 종료 시 또는 하이스코어가 갱신될 때 Wortal.stats.postStatsAsync()를 사용하여 점수나 진행 상황을 업데이트하는 것이 필수입니다. 이 단계는 GameSnacks 호환성을 위해 반드시 필요합니다.

사용 예시

// 게임 세션 종료 시 점수나 진행 상황을 업데이트
Wortal.stats.postStatsAsync("Level", myScore) .then(() => { 
        console.log("하이스코어가 성공적으로 게시되었습니다"); 
    }) .catch((error) => { 
        console.error("하이스코어 게시 실패:", error); 
});

중요한 포인트

  • 필수: 각 게임 세션 종료 후 또는 하이스코어가 업데이트된 후에 Wortal.stats.postStatsAsync()를 호출하여 GameSnacks에서 점수를 최신 상태로 유지합니다.
  • 레벨: 첫 번째 파라미터로 실제 레벨을 사용합니다. 게임에 레벨이 없으면 플레이스홀더 문자열(예: "Level")을 전달합니다.
  • 오류 처리: 점수 업데이트에 문제가 있을 경우 오류 로그를 기록하여 문제를 식별합니다.

이 베스트 프랙티스를 따르면 Wortal과 Gamesnack SDK의 통합이 원활하게 이루어지며, 플레이어 경험이 향상되고 플랫폼 기능을 최대한 활용할 수 있습니다.


참고

위 예시는 TypeScript로 작성되었습니다. 그러나 Wortal은 Unity, Cocos, GameMaker, Construct, Defold 등 다양한 게임 엔진에 대한 SDK도 지원합니다. 사용 중인 엔진에 맞는 올바른 이벤트 함수 호출을 위해 각 엔진의 구현 가이드를 참조하십시오. 핵심 함수는 엔진 간에 동일하지만 구현 문법은 다를 수 있습니다.