아이템
AssetStore에는 무료로 풀어준 리소스들이 많이 있었는데 그중에는 아이템들에 관란 리소스들도 많이 있었습니다.
그래서 일단 아이템들을 관리하기 위해서 스크립터블오브젝트를 만들었습니다.
public enum ItemType { Buff, // 아이템 종류: 버프 Skin, // 아이템 종류: 스킨 } [CreateAssetMenu(fileName = "ItemData", menuName = "ScriptableObjects/ItemData")] public class ShopUIData : ScriptableObject { // 아이템 데이터 필드 public ItemType itemType; // 아이템의 타입 (버프, 스킨 등) public Sprite itemImage; // 아이템의 이미지 public string itemName; // 아이템의 이름 }
그리고 data 폴더를 만들어서 테스트 아이템들을 만들어 보았습니다.
일단 아이템의 틀이 될 프리팹을 만들어서 프리팹을 생성할 때 이미지를 바꿔주면 되겠다고 생각하여
UIManager를 만들어서 아이템들을 생성해보았습니다.
public class ShopUIManager : MonoBehaviour { public ShopUIData[] ItemList; public Image imagePrefab; public GameObject[] parentTransform; int index =0; private void Start() { int buffIndex = 0; int skinIndex = 0; foreach (var item in ItemList) { if (item.itemType == ItemType.Buff) { createItem(item, buffIndex, parentTransform[0].transform); buffIndex++; } else if (item.itemType == ItemType.Skin) { createItem(item, skinIndex, parentTransform[1].transform); skinIndex++; } } } private void createItem(ShopUIData ItemData, int i,Transform pos) { float posY = +750 - ((i / 3) * 500); float posX = ((i % 3) * 350) - 350; // 이미지 UI 요소 생성 Image imageUI = Instantiate(imagePrefab, pos); // 이미지 위치 설정 RectTransform rectTransform = imageUI.GetComponent<RectTransform>(); rectTransform.anchoredPosition = new Vector2(posX, posY); // 아이템 데이터로 UI 업데이트 (예: 이미지 스프라이트 설정) Image[] childImages = imageUI.GetComponentsInChildren<Image>(); // 자식 오브젝트에서 모든 Image 컴포넌트 가져오기 foreach (Image childImage in childImages) { if (childImage.name == "itemImage") { childImage.sprite = ItemData.itemImage; break; // 이미지를 찾았으면 루프 종료 } } TMP_Text childText = imageUI.GetComponentInChildren<TMP_Text>(); // 자식 오브젝트에서 text 컴포넌트 찾기 if (childText != null) { childText.text = ItemData.itemName; // itemName 변경 } } }
아이템 리스트를 받아와서 타입에 맞춰서 UIManager가 위치를 계산해서 아이템을 생성해주는 코드입니다.
실행해보니 원하는 모양으로 잘 작동하는 것 같습니다.
오늘 해본것은 여기까지입니다.
아이템을 생성하는 부분을 좀 더 효율적으로 바꿀 수 있을 것 같아서 이 부분은 튜터님에게 여쭤보아서
좀 더 효율적으로 생성을 할 수 있게 바꿔보겠습니다.
21:00 : 내일은 위한 휴식!