개인 과제를 시작했다.
플레이어 정보까지는 정말 수월했는데,
역시나 인벤토리 및 상점에서 막혀버렸다.
인벤토리를 구현하고 싶은데, 생각보다 어렵다.
쉽게 생각하면 쉽겠지만 처음 써보는 기능들을 다 추가하려니
많이 돌아가고 있는 듯 하다,,,
개인 과제에서 델리게이트를 사용했다.
플레이어 데이터 정보를 저장했고,
인벤토리 및 아이템 구현은 아직 진행중이다.
먼저 델리게이트를 Action으로 선언했다.
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();
}
}
그리고 실제로 버튼을 눌렀을 때, 처리되는 함수를 제작했다.
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에서 행동을 처리한다.
인벤토리 및 상점 구현하기
아이템 관리하는 방법 알아보기