🐧 들어가기 앞서

개인 과제를 시작했다.

플레이어 정보까지는 정말 수월했는데,

역시나 인벤토리 및 상점에서 막혀버렸다.

인벤토리를 구현하고 싶은데, 생각보다 어렵다.

쉽게 생각하면 쉽겠지만 처음 써보는 기능들을 다 추가하려니

많이 돌아가고 있는 듯 하다,,,


🐧 오늘 배운 것

  1. 델리게이트 사용!

🐧 기억할 것 & 진행

개인 과제에서 델리게이트를 사용했다.

플레이어 데이터 정보를 저장했고,

인벤토리 및 아이템 구현은 아직 진행중이다.


🐧 게임에 구현한다면?

먼저 델리게이트를 Action으로 선언했다.

  • ManagementUI.cs
using System;
using UnityEngine;

public class ManagementUIHandler : MonoBehaviour
{
    public static ManagementUIHandler instance;

    public event Action OnStatusBtnClicked;
    public event Action OnInventoryBtnClicked;
    public event Action OnShopBtnClicked;

    private void Awake()
    {
        instance = this;
    }

    public void HandleStatusBtnClick()
    {
        Debug.Log("감지 완료! 이제 ManagementUI.cs로 넘어갑니다!");
        OnStatusBtnClicked?.Invoke();
    }

    public void HandleInventoryBtnClick()
    {
        OnInventoryBtnClicked?.Invoke();
    }

    public void HandleShopBtnClick()
    {
        OnShopBtnClicked?.Invoke();
    }
}

그리고 실제로 버튼을 눌렀을 때, 처리되는 함수를 제작했다.

  • ManagermentUI
using UnityEngine;
using UnityEngine.UI;

public class ManagementUI : MonoBehaviour
{
    [Header("UI")]
    [SerializeField] private GameObject StatusUI;
    [SerializeField] private GameObject InventoryUI;
    [SerializeField] private GameObject ShopUI;

    [Header("Buttons")]
    [SerializeField] private GameObject StatusBtn;
    [SerializeField] private GameObject InventoryBtn;
    [SerializeField] private GameObject ShopBtn;

    private void Start()
    {
        if (ManagementUIHandler.instance != null)
        {
            ManagementUIHandler.instance.OnStatusBtnClicked += HandleStatusBtnClick;
            ManagementUIHandler.instance.OnInventoryBtnClicked += HandleInventoryBtnClick;
            ManagementUIHandler.instance.OnShopBtnClicked += HandleShopBtnClick;
        }
        else
        {
            Debug.LogError("ManagementUIHandler가 null입니다.");
        }
    }

    private void HandleStatusBtnClick()
    {
        if(UIManager.instance != null)
        {
            UIManager.instance.SetGameObjectActive(StatusUI, true);
            UIManager.instance.SetGameObjectActive(StatusBtn, false);
            UIManager.instance.SetGameObjectActive(InventoryBtn, false);
            UIManager.instance.SetGameObjectActive(ShopBtn, false);
        }
    }

    private void HandleInventoryBtnClick()
    {
        if(UIManager.instance != null)
        {
            UIManager.instance.SetGameObjectActive(InventoryUI, true);
            UIManager.instance.SetGameObjectActive(StatusBtn, false);
            UIManager.instance.SetGameObjectActive(InventoryBtn, false);
            UIManager.instance.SetGameObjectActive(ShopBtn, false);
        }
    }

    private void HandleShopBtnClick()
    {
        Debug.Log("Shop Button Clicked!");
    }

    private void OnDestroy()
    {
        ManagementUIHandler.instance.OnStatusBtnClicked -= HandleStatusBtnClick;
        ManagementUIHandler.instance.OnInventoryBtnClicked -= HandleInventoryBtnClick;
        ManagementUIHandler.instance.OnShopBtnClicked -= HandleShopBtnClick;
    }
}

즉 버튼을 누르면, ManagementUIHandler.cs의 메서드가 먼저 실행되고,
ManagementUI.cs에서 행동을 처리한다.


🐧 내일 할 일

인벤토리 및 상점 구현하기

아이템 관리하는 방법 알아보기

0개의 댓글