C# Unity NPC 상점

삐얅·2024년 8월 9일
0

유니티

목록 보기
20/20

1. 개요

이번에 npc와 상점기능을 구현하면서 했던 실수가 있다.
객체를 신경쓰지 않고 코드를 작성해버린 것인데, 이것 때문에 쓸때없이 복잡하게 코드를 만든 문제가 있었다.

2. 코드

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를 배치했을 때 아이템 재고 같은 문제가 발생했다.
객체를 잘못준 것에 대해 수정작업이 필요하다.

0개의 댓글

관련 채용 정보