그룹 순위표
이 자습서에서는 순위표에서 그룹 엔터티를 사용하는 방법을 알아봅니다. 이 개념을 이해하기 위해, 우리는 테라포밍 행성에 초점을 맞춘 "RPG"게임의 예로 시작하겠습니다. 플레이어는 각 행성에 구조를 구축하고 개발하고, 자원을 수집하고, 자신의 선박을 만들고, 또한 다른 플레이어가 당신의 물건을 훔치기 위해 당신을 공격 할 수 있기 때문에 방어를 설정해야합니다. 이제 이 게임의 한 가지 주요 측면은 플레이어가 팀을 만들고 다른 플레이어를 그룹으로 공격하기 위해 동맹을 시작할 수 있다는 것입니다.
이러한 맥락을 염두에 두고 우리는 동맹을 위한 순위표를 만들고자 하므로, 우주 전체에서 어느 것이 더 강력한 동맹인지 알 수 있습니다.
그룹 순위표의 작동 방식을 자세히 살펴보기 전에 고려해야 할 몇 가지 주요 측면은 다음과 같습니다.
- 엔터티 프로그래밍 모델에 대한 자세한 내용은 엔터티 프로그래밍 모델을 참조하세요.
- 그룹 여기에서 그룹의 작동 방식을 확인하세요.
순위표 만들기
게임 및 시나리오 유형에 따라 여러 순위표를 만들 가능성이 높습니다. 이 특정 컨텍스트에서는 이 게임에 대한 다양한 시나리오와 서비스를 사용하여 각 시나리오를 해결하는 방법을 보여주고자 합니다.
플레이어 순위표
이 예제에서는 행성을 테라포밍하는 플레이어가 있으며 게임에서 특정 작업을 수행하여 경험 포인트를 얻고 있습니다.
따라서 플레이어 수준에서 해당 경험을 추적하기 위한 순위표를 갖게 될 것입니다. 이 프로세스는 기본 순위표 만들기와 같은 다른 자습서에 제공된 것과 동일한 동작을 따릅니다. 이제 여기서 중요한 측면은 EntityType 매개 변수가 플레이어만 사용할 수 있도록 해야 한다는 "title_player_account"
것입니다.
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
SizeLimit = 1000,
EntityType = "title_player_account",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 1,
ResetInterval = ResetInterval.Manual,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "XP",
SortDirection = LeaderboardSortDirection.Descending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
그룹 순위표
이제 얼라이언스 예제에서 제공된 게임의 측면을 살펴보겠습니다. 따라서 엔터티를 사용하여 PlayFab에서 동맹을 "group"
만들 수 있습니다. 이 그룹 엔터티를 사용하면 플레이어가 참가할 수 있는 구조를 가질 수 있으며, 게임에서 이러한 유형의 시나리오에 힘을 실어주는 역할 및 기타 흥미로운 기능도 있습니다. 순위표를 만들려면 두 가지를 명확히 해야 합니다.
- EntityType 매개 변수는 이어야
"group"
합니다. - 이 순위표는 독립적입니다. 따라서 얼라이언스에 대한 점수를 추가하는 것은 플레이어 순위표와 분리된 수동 프로세스입니다. 이 동작은 점수가 플레이어와 관련되거나 그룹에만 적용되는 새 메트릭이 될 수 있는 다양한 방법을 허용합니다.
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
SizeLimit = 1000,
EntityType = "group",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 1,
ResetInterval = ResetInterval.Manual,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "Group XP",
SortDirection = LeaderboardSortDirection.Descending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
순위표에 데이터 추가
두 순위표를 모두 만든 후에는 데이터를 추가하는 방법을 확인해야 합니다. 앞의 예제에서 언급했듯이 이러한 순위표는 서로 독립적입니다. 개발자는 동맹(그룹)에서 점수가 작동하는 방식에 대한 사용자 지정 논리를 적용할 수 있습니다.
public static async Task UpdateLeaderboardForPlayer(PlayFabAuthenticationContext context, string leaderboardName, string entityId, int score)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
UpdateLeaderboardEntriesRequest updateLeaderboardRequest = new UpdateLeaderboardEntriesRequest()
{
Entries = new List<LeaderboardEntryUpdate>()
{
new LeaderboardEntryUpdate()
{
EntityId = entityId,
Scores = new List<string> { score.ToString()}
}
},
AuthenticationContext = context,
LeaderboardName = leaderboardName,
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> updateResult = await leaderboardsAPI.UpdateLeaderboardEntriesAsync(updateLeaderboardRequest);
}
플레이어 순위표 또는 그룹 순위표에 항목을 추가하는 코드는 이 시나리오에서 동일합니다. 하지만 플레이어용 열이 5개인 순위표를 가질 수 있으므로 이 동작이 항상 사실이 아닌 것은 아닙니다. 단 하나의 열만 있는 그룹에 대한 다른 순위표를 가질 수 있습니다. 이 자습서에서는 순위표로 더 많은 작업을 수행하여 다중 열 순위표에 대해 자세히 설명합니다.
항상 염두에 두어야 할 것은 서비스에 올바른 EntityId
을 제공해야 한다는 것입니다. 플레이어의 순위표가 있는 경우 순위표가 그룹으로 구성된 경우 엔터티는 "title_player_account"
인 엔터티 "group
를 제공해야 합니다.
순위표에서 데이터 검색
이제 순위표의 데이터를 가져오기 위해 GetFriendLeaderboard API를 제외하고 순위표로 더 많은 작업을 수행 에 설명된 모든 옵션이 있습니다.
그룹 순위표의 표시 이름
마지막으로 그룹 순위표로 수행할 수 있는 또 다른 세부 정보는 엔터티의 그룹 이름으로 표시 이름을 설정하는 것입니다.
따라서 "Raiders"라는 동맹이 있는 경우 이 그룹 이름은 속성을 사용하여 엔터티 DisplayName
에 매핑됩니다.
public static async Task<CreateGroupResponse> CreateGroup(string groupName, PlayFabAuthenticationContext context)
{
var request = new CreateGroupRequest
{
GroupName = groupName,
AuthenticationContext = context
};
var response = await PlayFabGroupsAPI.CreateGroupAsync(request);
SetDisplayNameRequest displayRequest = new SetDisplayNameRequest()
{
AuthenticationContext = context,
DisplayName = groupName,
Entity = new PlayFab.ProfilesModels.EntityKey()
{
Id = response.Result.Group.Id,
Type = "group",
},
};
PlayFabResult<SetDisplayNameResponse> updateNameResult = await PlayFabProfilesAPI.SetDisplayNameAsync(displayRequest);
return response.Result;
}
이 예제에서는 메서드를 호출하여 그룹을 만듭니다 CreateGroupAsync
. 이 실행의 첫 번째 단계는 표시 이름을 설정하는 데 사용할 Group 개체를 반환하는 것입니다. 개체를 사용한 SetDisplayNameRequest
다음 메서드를 실행하여 그룹 이름을 엔터티에 매핑하여 PlayFabProfilesAPI.SetDisplayNameAsync
이 프로세스를 수행합니다.
결론
이 자습서에서는 다음 작업을 수행하는 방법을 알아보았습니다.
- 그룹 순위표를 만듭니다.
- 해당 순위표에 데이터를 공급하는 방법을 알아봅니다.
- 순위표를 검색합니다.
- 그룹 이름을 표시할 수 있도록 displayName을 변경합니다.