지난 연재글에서는 통계와 리더보드에 대해 알아봤습니다. 이번에는 업적 인터페이스를 사용하여 게임에 업적을 추가하는 방법을 알아보겠습니다. 업적은 통계 진행 상황 기반으로 자동 잠금해제하거나 API를 사용하여 수동으로 잠금해제하도록 설정할 수 있습니다. 이번 연재글에서 살펴볼 내용은 다음과 같습니다.
이제 모든 업적 정의를 얻는 방법을 알았으니, 이번에는 업적 정의에 대한 플레이어의 진행 상황을 얻겠습니다.
AchievementsView.xaml을 열고 두 번째 ListView 및 StackPanel을 이전 </ListView> 태그 바로 밑에 추가합니다.
업적에 어태치된 통계(있는 경우)를 표시하기 위해 약간 강제적인 방법을 사용하겠습니다. 여기서는 배열의 첫 번째 통계를 표시하고 있습니다(없더라도 표시). 프로덕션 환경에서는 StatInfo 프로퍼티에서 반환된 PlayerStatInfo 배열을 사용 전에 검증해야 합니다.
AchievementsViewModel.cs를 열고 다음 컬렉션을 SelectedAchievement 밑에 선언하여 플레이어 업적 진행 상황을 포함합니다.
AchievementsService.cs를 열고 다음 메서드를 추가하여 플레이어 업적 진행 상황의 쿼리 로직을 포함합니다.
AchievementsViewModel.cs를 열어 다음 명령을 선언하고 인스턴스화합니다.
마지막으로 업적을 선택한 뒤에만 잠금해제 버튼을 클릭할 수 있도록 AchievementsView.xaml.cs를 열고 다음 명령줄을 AchievementsListView_SelectionChanged 메서드에 추가합니다.
앱을 실행하고 인증한 뒤 ‘Achievements‘ 탭으로 이동하여 ‘Query definitions‘를 클릭합니다. 그런 다음 ‘TOP_SECRET‘ 업적을 클릭하고 ‘Unlock‘ 버튼을 클릭합니다. UI는 변하지 않지만 Visual Studio의 ’디버그 출력’에 ‘UnlockAchievements Success’라는 메시지가 표시될 것입니다. 이 코드는 표시되는 업적과 숨긴 업적에 모두 적용된다는 점에 유의하세요.
이제 ‘Query progress‘를 클릭하면 업적이 목록에 표시될 것입니다. 숨겨진 업적은 앞서 살펴보았듯 잠금해제되기 전까지는 QueryPlayerAchievements 호출로 반환되지 않습니다.
수동 잠금해제된 숨겨진 업적
마지막으로 업적 잠금해제 알림을 구독하여 업적이 통계 진행 상황으로 잠금해제될 때 자체 코드를 실행해 봅시다.
AchievementsService.cs를 열고 다음 메서드를 추가하여 업적 알림을 구독 또는 구독 해지합니다.
AchievementsUnlockedCallback은 이 경우 ‘디버그 출력’에 들어갈 내용 한 줄만을 작성하지만, 여기서 플레이어에게 업적 잠금해제를 알리는 모든 UI를 처리합니다.
AddNotifyAchievementsUnlockedV2는 업적 잠금해제 알림을 중단하는 데 사용할 수 있는 notificationId를 반환합니다. 이 샘플에서는 구현하지 않지만, RemoveNotification 메서드가 그 역할을 합니다.
QueryDefinitions 호출 후 간단히 알림을 받기 시작하려면 다음 QueryDefinitions 메서드 호출을 AchievementsService.cs의 ViewModelLocator.Main.StatusBarText = string.Empty 바로 위에 추가합니다.
앱을 재실행하고 인증한 다음 ‘Achievements‘ 탭으로 이동하여 ‘Query definitions‘ 버튼을 클릭합니다. 총 50번 클릭하는 업적의 진행 상황을 확인하려면 ‘Query progress‘ 버튼을 클릭합니다. 아직 잠금해제되지 않았다면 진행 상황을 확인하고 ‘Stats‘ 탭으로 이동하여 잠금해제가 될 때까지 클릭 횟수를 더 수집하세요.
Visual Studio의 ‘디버그 출력’에 업적이 잠금해제되었다는 메시지가 표시될 것입니다. 업적을 이미 잠금해제했다면 다음 섹션의 단계를 따라 업적을 리셋하고, 필요하다면 플레이어 통계도 리셋하세요.
플라이아웃 메뉴에서 플레이어의 제품 사용자 ID(PUID) 또는 계정별 ID(예: 에픽 계정 ID)를 입력하고 ‘검색’을 클릭합니다.
플레이어의 업적 목록이 현재 진행 상황 및 잠금해제 상태와 함께 표시됩니다. 이 목록에서 점 세 개 버튼을 클릭하여 이 업적을 잠금해제하거나 리셋할 수 있습니다.
‘모두 리셋’ 또는 ‘모두 잠금해제’ 버튼을 사용하여 모든 업적을 빠르게 토글할 수도 있지만, 이를 프로덕션 환경에서 사용할 때는 주의해야 합니다. 이 기능은 개발 도중에 가장 유용합니다. 또 다른 좋은 방법은 개발 중 업적 테스트용으로 별도의 디플로이를 생성하는 것입니다. 플레이어 데이터는 모두 특정 디플로이에 지정되기 때문입니다.