본문 바로가기

플레이팹 상점 기능

상점기능

플레이팹에서 경제탭으로 이동후 카탈로그 만들기를 선택한다. 카탈로그는 게임에서의 상점 같은 기능이다.

카탈로그에 원하는 아이템에 대한 정보를 입력해놓고 카탈로그를 불러오면 카탈로그에 등록해놓은 아이템의 정보들을 가져올수 있다.

새 카탈로그 만들기를 선택하고 카탈로그 버전을 입력한다. 나중에 카탈로그를 불러올때 이 버전을 입력해야한다.

카탈로그를 만들면 아이템이 기본적으로 하나가 주어지는데 이것을 지우면 아무아이템도 없으므로 카탈로그 자체가 삭제된다. 기본으로 있는 아이템하나를 편집한다.

아이템 편집에 들어가면 각종항목이 있다.

표시해놓은 1번부터 7번까지 입력을한다.

1~5번까지는 그냥 string으로 정보가 넘어오니 편한데로 입력을해주고

6번은 이아이템의 가격을 표시하는것인데 내가 따로 게임내에서 사용할 돈의 단위를 정해줄수도 있는데

기본적으로 RM이라는 화폐의 단위가 세팅되어 있다 통화단위는 RM이고 금액을 원하는데로 입력을한다.

지금은 RM선택후 100이라고 입력을 헀는데 아이템의 가격은 100 RM 이 되는것이다

7번은 딕셔너리 형태로 값을 저장하는것이다. 플레이팹에서 기본적으로 제공하는 항목들 말고 사용자가 나만의 항목을 만들어서 값을 넣고 싶을때 사용하는 부분이다.

키 값형태로 입력을해준다.

모든 값을 입력했으면 아이템 저장을 누른다.

 

플레이팹은 카탈로그를 불러오면 아이템이 리스트 형태로 넘어온다.

넘어온 리스트의 각각은 아이템 하나하나를 가리키고 해당아이템의 상세정보도 알수 있다.

 

1번부터 6번까지를 먼저 불러와 보겠다.

아래 코드를 작성하고 로그인후에 실행한다.

 

    public void GetShop()
    {
        var requset = new GetCatalogItemsRequest { CatalogVersion = "Shop" };
        PlayFabClientAPI.GetCatalogItems(requset, GetSuccess, GetFail);
    }

    private void GetFail(PlayFabError obj)
    {
        Debug.Log("카탈로그 불러오기 실패");
    }
    //카탈로그를 불러오는데 성공했다면 콜백이 된다.
    private void GetSuccess(GetCatalogItemsResult obj)
    {
        Debug.Log("칼탈로그 불러오기 성공");
        var items = obj.Catalog;
        for(int i=0; i<items.Count; i++)
        {
            Debug.Log(items[i].ItemId);
            Debug.Log(items[i].ItemClass);
            Debug.Log(items[i].Tags[0]);
            Debug.Log(items[i].DisplayName);
            Debug.Log(items[i].Description);
            Debug.Log(items[i].VirtualCurrencyPrices["RM"]);
        }
    }

 

카탈로그를 불러오기를 성공한 콜백함수에 결과로 Catalog의 정보를 얻어올수 있다.

 

이정보를 리스트 형태이기 때문에 이리스트만 받아서 리스트 만큼 반복문을 돌면서 모든 아이템의 정보를 얻을수 있다.

위에서부터 순서대로 1~6번까지의 정보를 불러오는 방법이다. 태그같은 경우는 태그를 입력할때 , 쉼표로 구분해서 여러개의 태그를 입력할수 있기때문에 불러올떄는 Tags[인덱스번호]의 형태로 불러온다.

 

6번의 가상화폐는 키값으로 돈의 단위를 입려갷주어야한다. 만약내가 경제탭에서 RM 말고 다른 돈의 단위를 만들어 놓은것이 있고 아이템정보 입력시 돈의 단위를 내가 만든 화폐의 단위를 해주었다면 그 화폐의 단위를 키값으로 입력하면된다.

 

7번은 불러오는 방법이 좀 다르다 커스텀 데이터를 불러오기전에 7번의 정보는 json 형태로 통신이된다고한다 플레이팹은 json 통신에 JOSN.net을 사용하므로 유니티 에셋스토에서 먼저 다운로드를 한다.

 

 

설치후 임포트가 됬으면 위에 코드를 수정한다.

사용을위해서

 

using Newtonsoft.Json; 를 추가해준다

 

7번의 커스텀 데이터를 받아오면 JSON 형태이므로 이것을 먼저 디시리얼라이즈를해준다. 택배 받으면 포장지 까는 그런 느낌이라고 생각하면됨.

아래 코드를 위에 코드의 for문안에 추가한다.

 

            var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(items[i].CustomData);
            Debug.Log(dic["key1"]);

 

JsonConvert.DeserializeObject<타입>(커스텀 데이터); 형태로 사용하는데

커스텀 데이터는 키 값 형식의 딕셔너리 형태로 입력을했기 떄문에 타입에 딕셔너리 형태를 적어줘야한다.

타입은 어떠한 자료형 타입으로 바꿀것이냐 이런의미로 보변된다.

위에 코드는 커스템 데이터가 JSON으로 넘어왔는데 이걸 딕셔너리 형태로 바꿔서 var dic이라는 변수에 넣을것이다 라는 의미

그러면 dic이란 변수는 딕셔너리 형태이고 딕셔너리는 키값으로 값을 가져올수있으므로 

dic["키값"] 을하면 값을 가져올수 있는것이다 키값은 아이템 등록할때 입력했던 키값을 말한다.

 

수정한 코드:

 

    public void GetShop()
    {
        var requset = new GetCatalogItemsRequest { CatalogVersion = "Shop" };
        PlayFabClientAPI.GetCatalogItems(requset, GetSuccess, GetFail);
    }

    private void GetFail(PlayFabError obj)
    {
        Debug.Log("카탈로그 불러오기 실패");
    }
    //카탈로그를 불러오는데 성공했다면 콜백이 된다.
    private void GetSuccess(GetCatalogItemsResult obj)
    {
        Debug.Log("칼탈로그 불러오기 성공");
        var items = obj.Catalog;
        for(int i=0; i<items.Count; i++)
        {
            Debug.Log("아이템 아이디 =" +items[i].ItemId);
            Debug.Log("아이템 클래스 =" + items[i].ItemClass);
            Debug.Log("아이템 태그 =" + items[i].Tags[0]);
            Debug.Log("아이템 디스플레이 네임 =" + items[i].DisplayName);
            Debug.Log("아이템 설명 =" + items[i].Description);
            Debug.Log("아이템 가격 =" + items[i].VirtualCurrencyPrices["RM"]);
            var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(items[i].CustomData);
            Debug.Log("커스텀 데이터 =" + dic["key1"]);
        }
    }

 

결과창: