반응형
유니티 플레이팹 상점 카테고리 가져오기 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);
}
}
반응형