UGS(Unity Gaming Services) Use Cases는 여러 샘플을 모아 둔 모음집으로, 다양한 UGS 제품을 사용하여 게임 개발에서 발생하는 일반적인 어려움을 해결하는 방법을 보여 드리기 위해 마련되었습니다.
이러한 샘플에서는 일반적인 백엔드 게임 활용 사례와 게임 디자인 요소를 구현하고, 구체적인 개발 과제를 해결하는 방법을 소개합니다. 또한 프로젝트에 여러 UGS 패키지를 통합하여 게임 백엔드의 효율성을 얼마나 증대할 수 있는지도 알아볼 수 있습니다.
무료 트랙과 프리미엄 트랙별 시즌 보상 티어 시스템인 배틀 패스도 샘플에 포함되어 있습니다. 이 블로그 게시물에서는 배틀 패스의 작동 방식과 함께 게임에 직접 구현하는 방법을 살펴보겠습니다.
개발이 계속되고 있는 Unity 프로젝트로, 다운로드하여 Unity 에디터에서 실행할 수 있습니다. 코드를 살펴보며 다양한 사례에서 Unity Gaming Services가 어떻게 활용되었는지 알아보세요.
이 프로젝트의 주요 목표는 개발자가 실제로 작업 가능한 예제에 액세스하여 프로세스를 더 신속하게 진행할 수 있도록 돕는 것입니다. 코드는 쉽게 읽을 수 있고 각자의 수준에 관계없이 모든 개발자가 액세스할 수 있도록 설계되었습니다.
배틀 패스는 게임 플레이에 대한 보상을 제공하되 장기적으로 게임에서 수익을 창출할 수 있도록 프리미엄 상품을 추가하는 방식으로, 플레이어 유지에 자주 사용되는 방법입니다.
일반적으로 다음과 같이 구분됩니다.
라이브 게임 중에서도 특히 멀티플레이어 게임의 경우, 플레이어 데이터는 대부분 서버에 저장됩니다.
이렇게 하면 특정 플레이어를 더 유리하게 만들거나, 구매 또는 획득해야 하는 아이템이나 재화를 특정 플레이어에게 부여하는 부정행위를 방지할 수 있습니다.
마찬가지로, 모든 플레이어에게 공정한 시즌 보상이나 배틀 패스를 제공하기 위해서는 모든 데이터와 의사 결정을 서버 측에서 관리해야 합니다.
이 배틀 패스 샘플은 주로 Cloud Code(베타) 서비스를 사용하여 주요 백엔드 인프라를 처리하도록 디자인되었습니다. Cloud Code를 사용하면 클라이언트와 별개로 게임 로직을 작성하고 실행할 수 있습니다.
이 샘플에서는 클라우드에 플레이어 데이터를 저장할 수 있는 Cloud Save(베타) 툴도 사용되었습니다. 샘플에서는 플레이어의 시즌 진행률을 플랫 키-값 시스템에 저장하는 데 사용했습니다. 현재 시즌의 배틀 패스 소유권 플래그도 Cloud Save를 사용해 저장했습니다.
Game Overrides(Remote Config 기반)를 사용하면 개인화된 게임 내 플레이어 경험을 만들어 현재 시즌의 콘텐츠와 배틀 패스 티어를 결정할 수 있습니다.
배틀 패스의 모든 티어 보상은 재화나 인벤토리 아이템으로, 모두 Unity Economy(베타)를 통해 관리됩니다. 또한 Economy에는 보석을 배틀 패스로 교환하기 위한 구매 항목이 하나 설정되어 있습니다.
온라인 백엔드에서 플레이어 데이터를 관리하는 여느 게임과 마찬가지로, 각 플레이어는 게임에 로그인해야 하는데, 여기에는 Unity Authentication(베타)을 사용합니다. 사용자가 로그인하면 모든 Unity Gaming Services SDK가 서버 요청마다 자동으로 플레이어의 고유 ID를 전송할 것을 인식합니다.
샘플의 작동 방식은 다음과 같습니다.
Cloud Save를 사용하면 플레이어 상태를 가져와서 게임 클라이언트를 통해 직접 설정할 수 있으나, 이 경우에는 그렇게 해서는 안 됩니다.
Cloud Save 데이터를 직접 설정하면 서버 측이 아닌 클라이언트 측에 플레이어 데이터에 대한 권한이 부여되어 해킹에 취약해질 수 있습니다. Cloud Code를 사용하면 Cloud Save에 데이터를 작성하기 전에 변경 사항을 검증할 수 있습니다.
Cloud Save에서 직접 플레이어 상태를 읽으면 이미 종료된 이전 시즌의 데이터를 가져오게 될 수 있습니다. Cloud Code를 사용하면 시즌이 종료된 경우 플레이어의 시즌 상태를 자동으로 재설정할 수 있습니다.
이 샘플 패키지를 사용하면 Unity Gaming Services로 서버 측이 권한을 지니고 모든 기능을 구현하는 배틀 패스를 사용할 수 있습니다.
Unity 대시보드에서 Game Overrides 캠페인을 설정하고 JSON 값으로 채워서 특정 기간의 게임 배틀 패스 설정을 정의할 수 있습니다.
1시간이나 주말 동안의 특별 이벤트처럼 원하는 기간으로 캠페인을 설정할 수 있으며, 배틀 패스의 경우 몇 달간 이어지는 시즌제로 설정할 수도 있습니다.
플레이어가 게임 UI와 상호 작용할 때 Cloud Code로 전송되는 요청은 다음과 같습니다.
시즌 XP 획득
보상 획득
배틀 패스 구매
플레이어의 시즌 진행률 기록
게임 클라이언트에 진행률 데이터 반환
이러한 호출 중 일부는 Economy나 Cloud Code를 직접 호출해 간편하게 실행할 수 있습니다. 그러나 이러한 유형의 요청은 시즌이 변경되었거나 시스템상 새로운 내용일 경우 플레이어의 시즌 진행률을 다시 초기화해야 할 수 있습니다.
각 요청을 보내기 전에 클라이언트가 시즌 데이터를 다시 초기화해야 할지 여부를 결정하지 않아야 합니다.
이 배틀 패스 샘플은 이미 무료 보상을 받은 플레이어가 배틀 패스로 업그레이드하면 이전 배틀 패스 보상도 자동으로 제공하도록 디자인되었습니다. 따라서 배틀 패스 구매를 처리하는 유일한 방법은 Cloud Code 함수를 사용하는 것입니다.
이 함수는 Economy에 호출을 보내 보상을 제외한 유료 구매를 완료하라는 호출을 보냅니다. 이 호출을 완료하면 두 가지의 결과가 발생합니다.
배틀 패스가 Cloud Save에 저장된 값의 형태로 플레이어에게 제공됩니다(현재 시즌의 배틀 패스만 나타냄).
플레이어가 이미 달성한 티어의 배틀 패스 보상을 모두 받습니다.
Unity Gaming Services를 사용하면 이 예제 외에도 다양한 시즌 보상과 배틀 패스를 설계할 수 있습니다.
Unity In-app Purchase 패키지를 사용하여 배틀 패스 구매 시 게임 내 재화가 아닌 실제 요금을 청구할 수도 있습니다.
Unity Gaming Services Use Cases 모음집에는 배틀 패스 외에도 여러 샘플 패키지가 포함되어 있습니다.
이 프로젝트는 Unity Gaming Services의 더 많은 활용 사례를 추가해 확장될 예정이므로, GitHub 저장소를 나중에 다시 확인해 보세요.