이번에 npc와 상점기능을 구현하면서 했던 실수가 있다.
객체를 신경쓰지 않고 코드를 작성해버린 것인데, 이것 때문에 쓸때없이 복잡하게 코드를 만든 문제가 있었다.
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class Shop : MonoBehaviour
{
public GameObject shop;
public List<ItemData> shopDataList;
public List<Button> itemBtn;
public GameObject goodsList;
public GameObject parentPosition;
public TextMeshProUGUI itemName;
public TextMeshProUGUI itemDescription;
public TextMeshProUGUI itemPrice;
private NPCInteraction npc;
public string npcId;
private void Start()
{
npc = UIManager.Instance.GetId(npcId);
SetShopGoods();
}
private void SetShopGoods()
{
interact();
foreach (ItemData itemdata in shopDataList)
{
GameObject goodsInstantiate = Instantiate(goodsList, parentPosition.transform);
itemName = goodsInstantiate.transform.Find("ItemDisplay/ItemName").GetComponent<TextMeshProUGUI>();
itemDescription = goodsInstantiate.transform.Find("ItemDisplay/ItemDescription").GetComponent<TextMeshProUGUI>();
itemPrice = goodsInstantiate.transform.Find("ItemDisplay/ItemPrice").GetComponent<TextMeshProUGUI>();
if (itemName != null)
{
itemName.text = itemdata.itemName;
}
if (itemDescription != null)
{
itemDescription.text = itemdata.description;
}
if (itemPrice != null)
{
itemPrice.text = itemdata.price.ToString();
}
Button itemBtn = goodsInstantiate.transform.Find("BuyBtn").GetComponent<Button>();
if (itemBtn != null)
{
itemBtn.onClick.RemoveAllListeners();
itemBtn.onClick.AddListener(() => npc.PurchasedItem(itemdata));
itemBtn.interactable = !npc.HasPurchasedItem(itemdata.name);
}
}
}
public void interact()
{
npc = UIManager.Instance.GetId(npcId);
}
}
그래도 구조를 남겨두면 참고할 수 있는 부분이 있을까해서 코드를 남겨뒀다.
일단 여기서 문제는 npc가 아이템들을 관리해야 하는데 이를 지키지 않아서 여러 npc를 배치했을 때 아이템 재고 같은 문제가 발생했다.
객체를 잘못준 것에 대해 수정작업이 필요하다.