유니티 플레이팹 상점 카테고리 가져오기 GetCatalog 간단 사용법

반응형

유니티 플레이팹 상점 카테고리 가져오기 GetCatalog 간단 사용법

플레이팹 로그인이 되었다는 가정하에 진행

 

유니티 플레이팹 게스트 로그인 Playfab Sign In with Guest Login 간단 사용법

코드 작성 using PlayFab; using PlayFab.ClientModels; using PlayFab.Json; using PlayFab.ProfilesModels; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using EntityKey = PlayFab.ProfilesMod

parksh3641.tistory.com

 


코드 작성

using PlayFab;
using PlayFab.ClientModels;
using System;
using System.Collections.Generic;
using UnityEngine;

public class PlayfabManager : MonoBehaviour
{
    // 카탈로그 아이템 목록 저장
    private List<CatalogItem> catalogItems = new List<CatalogItem>();
    
    // 카탈로그 로드 완료 이벤트
    public event Action<List<CatalogItem>> OnCatalogLoaded;
    
    // 에러 핸들러
    private void DisplayPlayfabError(PlayFabError error) => Debug.LogError("에러 발생: " + error.GenerateErrorReport());
    
    // 카탈로그 가져오기
    public void GetCatalog(string catalogVersion = "Shop") 
    {
        Debug.Log($"카탈로그 {catalogVersion} 정보 요청 중...");
        
        PlayFabClientAPI.GetCatalogItems(
            new GetCatalogItemsRequest() { 
                CatalogVersion = catalogVersion 
            },
            result => {
                // 카탈로그 목록 초기화 후 새로 저장
                catalogItems.Clear();
                catalogItems.AddRange(result.Catalog);
                
                Debug.Log($"{result.Catalog.Count}개의 아이템을 카탈로그에서 로드했습니다.");
                
                // 카탈로그 아이템 디버그 출력
                foreach (var item in result.Catalog)
                {
                    Debug.Log($"아이템: {item.DisplayName}, ID: {item.ItemId}, 클래스: {item.ItemClass}");
                    
                    // 여기에 아이템별 처리 로직 추가
                    ProcessCatalogItem(item);
                }
                
                // 카탈로그 로드 완료 이벤트 호출
                OnCatalogLoaded?.Invoke(catalogItems);
            },
            DisplayPlayfabError
        );
    }
    
    // 개별 카탈로그 아이템 처리
    private void ProcessCatalogItem(CatalogItem item)
    {
        // 아이템 ID에 따른 특별 처리
        if (!string.IsNullOrEmpty(item.ItemId))
        {
            // 아이템 ID에 따른 특별 처리 예시
            if (item.ItemId.Contains("weapon"))
            {
                // 무기 아이템 처리
            }
            else if (item.ItemId.Contains("armor"))
            {
                // 방어구 아이템 처리
            }
        }
        
        // 아이템 클래스에 따른 처리
        if (!string.IsNullOrEmpty(item.ItemClass))
        {
            // 아이템 클래스별 처리 예시
            switch (item.ItemClass)
            {
                case "Weapon":
                    // 무기 클래스 처리
                    break;
                case "Armor":
                    // 방어구 클래스 처리
                    break;
                case "Consumable":
                    // 소모품 클래스 처리
                    break;
            }
        }
        
        // 커스텀 데이터 처리 (있는 경우)
        if (item.CustomData != null)
        {
            // CustomData 예시: {"power": "100", "durability": "50"}
            foreach (var key in item.CustomData.Keys)
            {
                Debug.Log($"커스텀 데이터 - {key}: {item.CustomData[key]}");
            }
        }
    }
    
    // 특정 ID로 카탈로그 아이템 찾기
    public CatalogItem GetCatalogItemById(string itemId)
    {
        foreach (var item in catalogItems)
        {
            if (item.ItemId == itemId)
            {
                return item;
            }
        }
        return null;
    }
    
    // 특정 클래스의 카탈로그 아이템 목록 가져오기
    public List<CatalogItem> GetCatalogItemsByClass(string itemClass)
    {
        List<CatalogItem> result = new List<CatalogItem>();
        
        foreach (var item in catalogItems)
        {
            if (item.ItemClass == itemClass)
            {
                result.Add(item);
            }
        }
        
        return result;
    }
    
    // 전체 카탈로그 아이템 목록 반환
    public List<CatalogItem> GetAllCatalogItems()
    {
        return new List<CatalogItem>(catalogItems);
    }
}
반응형