다음을 통해 공유


그룹 순위표

이 자습서에서는 순위표에서 그룹 엔터티를 사용하는 방법을 알아봅니다. 이 개념을 이해하기 위해, 우리는 테라포밍 행성에 초점을 맞춘 "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을 변경합니다.

참고 항목