Google 플레이 업적 사용법

Google 플레이 업적을 사용하여 플레이어 참여도를 높이는 방법입니다.

Windows
MacOS
Linux

androidAchievements.png

환경설정

어플리케이션에 Google 플레이 서비스를 구성하는 방법 관련 정보는 Achievements | Play Games Services | Google Developers 문서를 참고하시기 바랍니다.

언리얼 프로젝트의 경우:

  1. 언리얼 에디터편집 메뉴에서 프로젝트 세팅 을 선택하면 프로젝트의 환경설정 옵션을 확인할 수 있습니다.

  2. 왼편에서 플랫폼: Android 탭을 선택합니다.

  3. Google Play Services (Google 플레이 서비스) 섹션에서 Enable Google Play Support (Google 플레이 지원 활성화) 옵션을 켭니다.

  4. Games App ID 칸에 어플리케이션의 App ID 를 입력합니다.

  5. Google Play License Key 칸에 Google 플레이 라이선스 키를 입력합니다.

  6. Achievement Map 에 엘리먼트를 추가합니다.

  7. Achievement Map 에서 언리얼 프로젝트 안에서만 사용되는 Name 과 Google 플레이 서비스에서 구성한 Achievement ID 를 입력해 줘야 할 것입니다.

    androidSetup.png

    이 값 모두 Google Player Develeoper Console 의 App 과 Game Service 부분에서 찾을 수 있습니다.

업적 맵의 Name 값은 Google 플레이 서비스 Achievement ID 에 대한 매핑일 뿐이고, iOS 는 Achievement Reference 를 바로 참조하므로, Android와 iOS 양쪽 플랫폼에서 출시하는 경우, iOS 게임 센터 세팅의 Achievement Reference 를 Name 으로 설정해 줘야 플랫폼에 관계없이 하나의 노드 호출로 처리할 수 있습니다.

Android와 iOS 디바이스 양쪽에서 어플리케이션을 출시하려는 경우, iOS 게임 센터 업적 사용법 문서에서 업적 구성 관련 자세한 정보를 참고하시기 바랍니다.

업적 캐시

Cache Achievements 는 플랫폼의 게임 서비스에서 업적 목록과, 그 업적에 대한 현재 플레이어의 값을 요청합니다. 이 노드가 값을 반환하는 데 성공하면 Get Cached Achievement Value 를 사용할 수 있을 것입니다.

참고로 이는 latent (잠복성) 노드로, 실행 출력 핀이 여럿 있을 수 있습니다. 가장 위의 것은 "pass through" (통과)로, 다른 실행 출력 핀과 똑같이 작동합니다. 다른 두 가지 핀은 (On SuccessOn Failure) 온라인 서비스가 값을 반환( 또는 실패)할 때 실행됩니다.

블루프린트:

아래는 Unreal Match 3 (언리얼 매치 3) 샘플 게임의 Global Game Instance 블루프린트 예제입니다. 사용자가 디바이스의 게임 플랫폼(Game Center, Google Play)에 로그인한 이후에는 Cache Achievements 노드를 실행, 이 시점에서 (상단 출력 실행 핀의 실행을 제거하는 것으로) 사실상 실행을 멈춰 서비스가 모든 업적을 반환할 수 있는 시간을 줍니다.

cacheAchievements.png

업적에서 값 읽기

Get Cached Achievement Progress 는 제공된 Player Controller 에 대해 주어진 Achievement ID 의 진행상황을 반환하며, 앞서 Cache Achievements 노드가 실행되고 성공적으로 반환된 경우에만 작동합니다.

iOS Game Center 의 경우, 이 값은 사실상 integer 로 저장되기에 그 float 에다 floor 를 적용한(, 즉 그 값보다 작은 정수인) 것입니다. Google 플레이 서비스에서는 float 값을 받습니다.

블루프린트:

아래는 Unreal Match 3 (언리얼 매치 3) 샘플 게임의 Global Game Instance 블루프린트 예제입니다. 업적이 캐시에 저장되면, 업적 이름과 함께 배열에서 그 목표 점수까지 같이 끌어오는 루프를 돌리고, 이미 오프라인 값이 있으면 빠르게 비교를 합니다. 그런 다음 서비스 또는 로컬 중 높은 값을 취합니다:

readAchievement.png

업적에 값 쓰기

Write Achievement Progress 는 플랫폼의 업적 시스템에 메시지를 전송하여 주어진 사용자(, 즉 Player ControllerUser Tag) 에 대해 제공된 업적에 Progress (진행상황)을 기반으로 한 백분율 (0.0% - 100.0%) 값을 씁니다. "일회성" 업적의 경우 Progress 에 항상 100.0 을 전달하는 반면, 진행형 업적의 경우 해당 업적에 도달하는 것을 100.0 으로 해서 항상 그보다 적은 백분율 값을 전달합니다.

iOS 게임 센터의 경우, 이 값은 실제로 정수로 전송되므로, 진행형 업적 값은 1 에서 100 사이의 정수만 가능합니다. Google 플레이 서비스에서는 실수가 전송됩니다.

참고로 이는 latent (잠복성) 노드이므로, 실행 출력 핀이 여럿 있습니다. 가장 상단의 것은 "pass through" (통과)로, 다른 실행 출력 핀과 마찬가지로 작동합니다. 다른 두 개의 핀 (On SuccessOn Failure) 은 온라인 서비스가 값을 반환( 또는 실패)할 때 실행됩니다. 실행시 성공을 반환하면 Written Achievement Name, Written Progress, Written User Tag 는 노드에 전달한 것과 동일한 비어있지 않은 값을 반환합니다.

블루프린트:

아래는 언리얼 매치 3 샘플 게임의 Global Game Instance 블루프린트 예제입니다. 현재 업적 값을 해당 업적 진행에 필요한 단위와 비교하는 루프가 있고, 진행이 되었다면 Write Achievement 이벤트가 호출됩니다:

writeAchievement.png

이렇게 한 이유는, 잠복성 노드는 함수에서 사용할 수 없기 때문입니다.

플랫폼별 업적 화면 표시

Show Platform Specific Achievement Screen 은 현재 플랫폼에 대해 제공된 Player Controller 의 업적을 표시합니다.

블루프린트:

아래는 언리얼 매치 3 샘플 게임의 GameOverButtons 블루프린트 위젯 예제입니다. ShowAchievements 버튼이 눌리면, 게임은 현재 플랫폼의 업적 화면 표시를 시도합니다.

showAchievements.png

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼