Unity 검색

Unity Gaming Services Use Cases에서 배틀 패스 샘플 사용해 보기

2022년 4월 22일 게임 | 11 분 소요
Battle Pass Sample Header
Battle Pass Sample Header
공유

Is this article helpful for you?

Thank you for your feedback!

UGS(Unity Gaming Services) Use Cases는 여러 샘플을 모아 둔 모음집으로, 다양한 UGS 제품을 사용하여 게임 개발에서 발생하는 일반적인 어려움을 해결하는 방법을 보여 드리기 위해 마련되었습니다. 

이러한 샘플에서는 일반적인 백엔드 게임 활용 사례와 게임 디자인 요소를 구현하고, 구체적인 개발 과제를 해결하는 방법을 소개합니다. 또한 프로젝트에 여러 UGS 패키지를 통합하여 게임 백엔드의 효율성을 얼마나 증대할 수 있는지도 알아볼 수 있습니다.

무료 트랙과 프리미엄 트랙별 시즌 보상 티어 시스템인 배틀 패스도 샘플에 포함되어 있습니다. 이 블로그 게시물에서는 배틀 패스의 작동 방식과 함께 게임에 직접 구현하는 방법을 살펴보겠습니다. 

UGS Use Cases란?

개발이 계속되고 있는 Unity 프로젝트로, 다운로드하여 Unity 에디터에서 실행할 수 있습니다. 코드를 살펴보며 다양한 사례에서 Unity Gaming Services가 어떻게 활용되었는지 알아보세요.

이 프로젝트의 주요 목표는 개발자가 실제로 작업 가능한 예제에 액세스하여 프로세스를 더 신속하게 진행할 수 있도록 돕는 것입니다. 코드는 쉽게 읽을 수 있고 각자의 수준에 관계없이 모든 개발자가 액세스할 수 있도록 설계되었습니다.

배틀 패스란?

배틀 패스는 게임 플레이에 대한 보상을 제공하되 장기적으로 게임에서 수익을 창출할 수 있도록 프리미엄 상품을 추가하는 방식으로, 플레이어 유지에 자주 사용되는 방법입니다.

일반적으로 다음과 같이 구분됩니다.

  • 플레이어는 게임을 진행하며 포인트를 획득해 점점 더 가치가 높은 보상을 받을 수 있습니다.
  • 보상 트랙은 다음 두 가지이며, 별개로 주어집니다.
    • 모든 플레이어가 받을 수 있는 무료 보상.
    • 배틀 패스를 구매하여 받을 수 있는 프리미엄 보상(대부분 유료 게임 내 재화로 구매).
  • 보상 트랙은 기간 한정으로(보통 게임의 '시즌' 동안) 제공됩니다.
Battle Pass screen

샘플은 어떻게 작동하나요?

라이브 게임 중에서도 특히 멀티플레이어 게임의 경우, 플레이어 데이터는 대부분 서버에 저장됩니다. 

이렇게 하면 특정 플레이어를 더 유리하게 만들거나, 구매 또는 획득해야 하는 아이템이나 재화를 특정 플레이어에게 부여하는 부정행위를 방지할 수 있습니다. 

마찬가지로, 모든 플레이어에게 공정한 시즌 보상이나 배틀 패스를 제공하기 위해서는 모든 데이터와 의사 결정을 서버 측에서 관리해야 합니다. 

이 배틀 패스 샘플은 주로 Cloud Code(베타) 서비스를 사용하여 주요 백엔드 인프라를 처리하도록 디자인되었습니다. Cloud Code를 사용하면 클라이언트와 별개로 게임 로직을 작성하고 실행할 수 있습니다.

이 샘플에서는 클라우드에 플레이어 데이터를 저장할 수 있는 Cloud Save(베타) 툴도 사용되었습니다. 샘플에서는 플레이어의 시즌 진행률을 플랫 키-값 시스템에 저장하는 데 사용했습니다. 현재 시즌의 배틀 패스 소유권 플래그도 Cloud Save를 사용해 저장했습니다.

Game Overrides(Remote Config 기반)를 사용하면 개인화된 게임 내 플레이어 경험을 만들어 현재 시즌의 콘텐츠와 배틀 패스 티어를 결정할 수 있습니다.

배틀 패스의 모든 티어 보상은 재화나 인벤토리 아이템으로, 모두 Unity Economy(베타)를 통해 관리됩니다. 또한 Economy에는 보석을 배틀 패스로 교환하기 위한 구매 항목이 하나 설정되어 있습니다.

온라인 백엔드에서 플레이어 데이터를 관리하는 여느 게임과 마찬가지로, 각 플레이어는 게임에 로그인해야 하는데, 여기에는 Unity Authentication(베타)을 사용합니다. 사용자가 로그인하면 모든 Unity Gaming Services SDK가 서버 요청마다 자동으로 플레이어의 고유 ID를 전송할 것을 인식합니다.

샘플의 작동 방식은 다음과 같습니다. 

  • 시즌 보상 설정 데이터가 Game Overrides에서 클라이언트로 전송되며, Cloud Code에도 제공됩니다(읽기 전용). 게임 클라이언트는 이 데이터를 사용하여 UI를 결정합니다. Cloud Code는 이 데이터를 사용하여 유효한 보상 티어를 달성한 플레이어에게 어떤 보상을 제공할지 결정합니다.
  • Cloud Save는 보상 티어에 대한 플레이어의 진행 상황을 추적하는 데 사용됩니다. 플레이어에게는 Locked, Unlocked, Claimed의 세 가지 값이 포함된 상호 배타적인 티어 상태 배열이 적용되게 됩니다.
  • Cloud Save는 플레이어가 현재 시즌의 배틀 패스를 구입했는지 여부를 나타내는 값 또한 저장합니다.
Battle Pass blog diagram

Cloud Save를 사용하면 플레이어 상태를 가져와서 게임 클라이언트를 통해 직접 설정할 수 있으나, 이 경우에는 그렇게 해서는 안 됩니다.

Cloud Save 데이터를 직접 설정하면 서버 측이 아닌 클라이언트 측에 플레이어 데이터에 대한 권한이 부여되어 해킹에 취약해질 수 있습니다. Cloud Code를 사용하면 Cloud Save에 데이터를 작성하기 전에 변경 사항을 검증할 수 있습니다.

Cloud Save에서 직접 플레이어 상태를 읽으면 이미 종료된 이전 시즌의 데이터를 가져오게 될 수 있습니다. Cloud Code를 사용하면 시즌이 종료된 경우 플레이어의 시즌 상태를 자동으로 재설정할 수 있습니다.

게임에 배틀 패스를 추가하는 방법

이 샘플 패키지를 사용하면 Unity Gaming Services로 서버 측이 권한을 지니고 모든 기능을 구현하는 배틀 패스를 사용할 수 있습니다.

Game Overrides로 시즌 보상 설정

Game override

Unity 대시보드에서 Game Overrides 캠페인을 설정하고 JSON 값으로 채워서 특정 기간의 게임 배틀 패스 설정을 정의할 수 있습니다. 

1시간이나 주말 동안의 특별 이벤트처럼 원하는 기간으로 캠페인을 설정할 수 있으며, 배틀 패스의 경우 몇 달간 이어지는 시즌제로 설정할 수도 있습니다.

Cloud Code로 서버 측에 권한이 있는 로직 작성

플레이어가 게임 UI와 상호 작용할 때 Cloud Code로 전송되는 요청은 다음과 같습니다.

  • 시즌 XP 획득

  • 보상 획득

  • 배틀 패스 구매

  • 플레이어의 시즌 진행률 기록

  • 게임 클라이언트에 진행률 데이터 반환

이러한 호출 중 일부는 EconomyCloud Code를 직접 호출해 간편하게 실행할 수 있습니다. 그러나 이러한 유형의 요청은 시즌이 변경되었거나 시스템상 새로운 내용일 경우 플레이어의 시즌 진행률을 다시 초기화해야 할 수 있습니다. 

각 요청을 보내기 전에 클라이언트가 시즌 데이터를 다시 초기화해야 할지 여부를 결정하지 않아야 합니다.

이 배틀 패스 샘플은 이미 무료 보상을 받은 플레이어가 배틀 패스로 업그레이드하면 이전 배틀 패스 보상도 자동으로 제공하도록 디자인되었습니다. 따라서 배틀 패스 구매를 처리하는 유일한 방법은 Cloud Code 함수를 사용하는 것입니다. 

이 함수는 Economy에 호출을 보내 보상을 제외한 유료 구매를 완료하라는 호출을 보냅니다. 이 호출을 완료하면 두 가지의 결과가 발생합니다.

  • 배틀 패스가 Cloud Save에 저장된 값의 형태로 플레이어에게 제공됩니다(현재 시즌의 배틀 패스만 나타냄).

  • 플레이어가 이미 달성한 티어의 배틀 패스 보상을 모두 받습니다.

배틀 패스를 더욱 다양하게 구현하는 방법

Unity Gaming Services를 사용하면 이 예제 외에도 다양한 시즌 보상과 배틀 패스를 설계할 수 있습니다.

  • 티어 또한 자유롭게 구성할 수 있습니다. 예를 들어, 일부 티어에는 무료 보상을 포함하지 않을 수 있습니다. 또는 정해진 순서 대신, 플레이어가 페이지에서 원하는 순서대로 티어를 선택하여 보상을 모두 획득한 후 다음 페이지를 잠금 해제하는 방식의 좀더 복잡한 시스템을 구축할 수도 있습니다. 이처럼 배틀 패스는 원하는 만큼 복잡하게 디자인할 수 있습니다. 
  • 이 샘플에서는 대부분의 보상을 재화로 지급했지만, 보통 멀티플레이어 게임의 배틀 패스 보상은 캐릭터나 특정 요소를 꾸밀 수 있는 아이템으로 제공됩니다. 싱글 플레이어 게임을 만드는지, 멀티플레이어 게임을 만드는지에 따라 배틀 패스 디자인도 달라질 수 있습니다.

Unity In-app Purchase 패키지를 사용하여 배틀 패스 구매 시 게임 내 재화가 아닌 실제 요금을 청구할 수도 있습니다.

Unity Gaming Services Use Cases

Unity Gaming Services Use Cases 모음집에는 배틀 패스 외에도 여러 샘플 패키지가 포함되어 있습니다.

  • 랜덤 상자: Cloud Code를 사용하여 임의의 Economy 재화로 플레이어에게 보상을 지급합니다.
  • 일일 보상: 플레이어가 일정 시간 간격으로 재화 및 인벤토리 아이템을 무작위로 획득하도록 합니다.
  • 스타터 팩: Cloud Code로 일회성 구매 기능을 구현하여 플레이어가 스타터 팩을 구매할 수 있도록 합니다.
  • 시즌 이벤트: 기간 한정 특별 이벤트에 따라 게임 콘텐츠를 원격 업데이트합니다.
  • 레벨 난이도 A/B 테스트: 플레이어를 여러 테스트 그룹으로 분류하여 가장 많은 참여를 유도할 수 있는 특정 변수의 적정 수치(이 경우 레벨업에 필요한 XP의 양)를 결정합니다.
  • 방치형 클리커 미니 게임: 방치형 클리커 게임처럼 서버 권한 게임 상태를 실시간으로 업데이트합니다.
  • 클라우드 AI 미니 게임: 지속적인 상태와 통화 보상, 통계, 직관적인 AI를 갖추고 UGS를 기반으로 실행되는 AI 대결형 삼목(Tic-Tac-Toe) 게임 형식의 서버 권한 게임플레이입니다.
  • 명령 일괄 처리: 게임 명령을 대기열로 그룹화하고 서버에서 단일 배치로 처리하여 게임플레이 중 서버 호출의 양과 빈도를 줄입니다.

이 프로젝트는 Unity Gaming Services의 더 많은 활용 사례를 추가해 확장될 예정이므로, GitHub 저장소를 나중에 다시 확인해 보세요.

2022년 4월 22일 게임 | 11 분 소요

Is this article helpful for you?

Thank you for your feedback!