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. 게임 이벤트 로그
gameOver
나 levelComplete
와 같은 이벤트를 기록하는 것은 중요합니다. 게임 플레이 결과를 기록하려면 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도 지원합니다. 사용 중인 엔진에 맞는 올바른 이벤트 함수 호출을 위해 각 엔진의 구현 가이드를 참조하십시오. 핵심 함수는 엔진 간에 동일하지만 구현 문법은 다를 수 있습니다.