PlayFab 로그인 부터 DB 데이터 추가까지

2022. 8. 26. 17:59기술/네트워크

반응형

무엇부터 해야하는가?

작은것 부터 목표를 정해놓고 하면 됩니다. 목표를 정하는 이유는 방향성을 잃지 않게 하기 위함입니다.

"시작이 반이다." "천리길도 한 걸음부터"

 

목표

1. PlayFab 가입

2. 유저 생성해보기 (커스텀 로그인)

3. DB에 데이터 추가해보기

이렇게 진행해 볼 예정입니다.

일단 10만 유저까지 부담이 없으니 랭킹이든 이것저것 적극적으로 마음껏 만들어 볼 수 있을 것 같습니다.

 

MS PlayFab 설명서

 

PlayFab이란? - PlayFab

PlayFab은 관리되는 게임 서비스, 실시간 분석 및 LiveOps를 사용하는 라이브 게임을 위한 완벽한 백 엔드 플랫폼입니다.

docs.microsoft.com

문서를 찬찬히 읽어봐도 좋고

 

일단 개발자 계정 등록을 해보겠습니다. 프로젝트가 하나 생성이 되고 클릭해서 들어가면 게임관리자 화면이 나옵니다.

게임관리자 메뉴에 대해서 설명서에 나와있습니다. (뒤끝 콘솔에 해당하는것 같습니다.)

'그룹'(길드같은) 기능은 있는거 같고 특이사항으로 '경제' 기능이 있는거 같습니다. 순위표 기능도 있는거 같네요.

프로젝트를 선택
게임관리자 화면

우상단 프로필에서 언어 설정을 한국어로 하면 한국어로 나옵니다.

 

외국 문서는 번역이 되어 있더라도 설명하는 분량이 많은데요. 필요한 정보를 찾아내는 것이 중요합니다.

백과사전을 처음부터 끝까지 읽을 필요는 없고 필요한 부분을 찾아서 읽는다고 생각하시면 편합니다.

뒤끝에서도 필요한 부분만 찾아가며 개발을 했었습니다.

 

로그인을 하려면 소프트웨어 개발 킷 (SDK)가 필요하겠죠.

SDK 개요 > Unity를 사용하여 개발된 타이틀 > Unity PlayFab SDK GitHub 리포지토리

GitHub에서 SDK를 다운로드 합니다.

유니티 에디터 > 에셋 > 패키지 임포트 > UnitySDK.unitypackage

'유니티 편집기 확장'은 유틸리티성으로 PlayFab SDK 관리를 돕는 간단한 툴인거 같습니다.

유니티 에디터 상단에 PlayFab > MakePlayFabShareSetting 클릭 후 프로젝트 ID와 비밀키를 입력해줍니다.

코딩스타일과 코드입니다.

public partial class Server : MonoBehaviour
{
    void InitPlayFab()
    {
        PlayFabSettings.TitleId = "ABCED";
        LogInPlayFabGuest();
    }

    void LogInPlayFabGuest()
    {
        PlayFabClientAPI.LoginWithCustomID(new LoginWithCustomIDRequest()
        {
            // 계정 없으면 자동 생성
            CreateAccount = true,
            CustomId = "Custom01"
        }, 
        Success => 
        {
            Debug.Log("로그인 성공");
        }, 
        Failure => 
        {
            Debug.LogFormat("<color=red>로그인 실패 {0}", Failure.GenerateErrorReport());
        });
    }
}

플레이어 정보가 하나 생성됩니다

DB 테이블 데이터는 어디에 있는가?

PlayFab 데이터 개요 - PlayFab | Microsoft Docs

 

PlayFab 데이터 개요 - PlayFab

PlayFab 데이터 제공 및 기능에 대한 개요를 알아봅니다. PlayFab 데이터는 데이터 분석, 스토리지, 처리 및 내보내기를 위한 도구 세트입니다.

docs.microsoft.com

DB 개념을 사용하지 않고 'PlayFab 데이터'라는 개념으로 사용하는거 같고

읽어보면 플레이어 데이터, 캐릭터 데이터, 그룹 데이터가 저장됩니다.라고 나와있습니다. 한국어가 헷갈리면 영어로 읽어보면 조금 더 명확할 수도 있습니다. 예제코드는 빠른 시작에 있습니다.

로그인 성공 시 유저 데이터를 얻어오고 없을 경우 닉네임창을 띄우고 유저 닉네임을 입력 받습니다.

그 다음 필요한 유저 데이터를 업데이트 합니다.

 

기존 코드에서 PlayFab으로 흐름 변경

(Server.cs 를 partial class ServerBackEnd.cs와 partial class ServerPlayFab 으로 분리하고

함수명은 똑같이 하되 뒤에 PlayFab을 붙여줘서 혼란을 줄입니다.)

    // 유저 닉네임 입력창에서 OK 버튼을 누르면 호출됨
    public void CreateNickname(string nickName)
    {
        switch (Mode)
        {
            case EServerMode.BackEnd:
            	// 기존 흐름 : 뒤끝 서버에 Request 보내고 성공과 에러 처리
                // .. 생략
                InsertServerTables();
                break;

            case EServerMode.PlayFab:
            	// 흐름 변경
                InsertServerTablesPlayFab();
                break;

            default:
            	// 로컬 저장
                UserNickName = nickName;
                PlayerPrefs.SetString("UserNickName", nickName);
                InsertLocalTables();
                break;
        }
    }

뒤에 갈 수록 위 코드가 많아지는 관계로 그냥 뒤끝 서버 코드를 삭제하는 것이 코드 관리가 편할 것 같습니다.

PlayFab 코드에 익숙해지다보니..

// 뒤끝 서버 유저닉네임 생성 시 최초 데이터 테이블 추가하던 코드 함수를 복사하여
// 뒤에 PlayFab을 붙이고 안에 내용을 수정
void InsertServerTablesPlayFab()
    {
        Client user;

        PlayFabClientAPI.UpdateUserData(new UpdateUserDataRequest()
        {
            Data = user.CreateUserData().PlayFab
        },
        result => Debug.Log("Successfully updated user data"),
        error => {
            Debug.LogFormat("<color=red>유저 데이터 추가 실패 {0}", error.GenerateErrorReport());
            // 네트워크 에러창 띄우기
        });
    }
/// <summary>
/// 유저 데이터
/// </summary>
[Serializable]
public class UserData
{
    public Param Param // 기존 뒤끝 서버의 유저 데이터
    {
        get
        {
            Param param = new Param();
            param.Add("key1", key1);
            param.Add("key2", key3);
            param.Add("key2", key3);
            return param;
        }
    }

    public Dictionary<string, string> PlayFab
    {
        get
        {
            Dictionary<string, string> param = new Dictionary<string, string>();
            param.Add("key1", key1);
            param.Add("key2", key3);
            param.Add("key2", key3);
            return param;
        }
    }
}

다음과 같이 데이터가 추가됩니다.

뒤끝 서버와 다른점은 뒤끝 서버는 UserTable, CharacterTable, InventoryTable 이런식으로 테이블을 생성해주어서 그 테이블 명으로 데이터를 추가합니다. Indate값 같은것도 필요합니다.

 

PlayFab은 플레이어 데이터, 캐릭터, 인벤토리 이런식으로 애초에 나누어져 있는거 같습니다.

 

저는 우편함, 길드 기능은 아직 사용하지 않았기 때문에 테이블 추가까지만 하고

추가 기능은 PlayFab의 기능을 이용해 보아야 할 것 같습니다.

 

목표

V PlayFab 가입

V 유저 생성해보기 (커스텀 로그인)

V DB에 데이터 추가해보기

 

찬찬히 하다보면 어렵지 않을 것입니다. 외에도 PlayFab 정보 검색해보면 참고할 만한 자료가 나옵니다.

 

현재까지 연구한 바로는 뒤끝 서버로 많은 개발이 진행된 상황이라면 PlayFab으로 바꿀 수가 없습니다.

두 백앤드 서버 서비스의 구조가 다르기 때문입니다.

 

뒤끝 서버는 테이블에 Character 추가하고 DB에 캐릭터 데이터를 추가하는 구조를 사용하였습니다.

PlayFab 캐릭터 데이터 생성하기가 상당히 까다롭게 되어 있습니다. 

이러한 점이 다릅니다.

 

참조하면 좋은 블로그

유니티 플레이팹 Json으로 플레이어 타이틀 데이터 저장, 불러오기 Playfab 간단 사용법 (tistory.com)

 

유니티 플레이팹 Json으로 플레이어 타이틀 데이터 저장, 불러오기 Playfab 간단 사용법

플레이팹 로그인이 되었다는 가정하에 진행 using System; using System.Collections.Generic; using PlayFab; using PlayFab.ClientModels; using UnityEngine; public class DataContent { public string name =..

parksh3641.tistory.com

 


 

반응형