UI Button에 OnClick 코드로 관리하는 방법(AddListener)

2024. 12. 6. 16:21카테고리 없음

기존에 UI Button에 있는 OnClick에 함수를 할당할때에는 드래그엔드롭을 통해 함수를 할당해 줬는데 이번에 사용할 방법은 코드로 함수를 할당해 주는 방법으로 해볼것이다.

 

필드 정의

[SerializeField] private Button equipment;
[SerializeField] private Button consumption;
[SerializeField] private Button misc;

- 드래그 앤 드롭 방식으로 Unity 에디터에서 해당 버튼들을 연결할 수 있다.

함수 정의(AddListener)

private void ButtonInitialize()
{
    equipment.onClick.AddListener(() => Refresh(ItemType.Equipment));
    consumption.onClick.AddListener(() => Refresh(ItemType.Consumption));
    misc.onClick.AddListener(() => Refresh(ItemType.Misc));
}

AddListener를 통해서 각 버튼 클릭에 대해 동적으로 함수를 할당하는 방법이다. 이를 이용하면 인자를 넘겨주거나, 별도의 메서드를 호출할 수도 있다.

람다식을 통해서 동작할 함수를 작성하면 된다.

public void Refresh(ItemType type)
{
    DeleteCell();
    
    for (int i = 0; i < _items.Count; i++)
    {
        if (DataManager.Instance.Item.GetItemData(_items[i].itemId).itemType == type)
        {
            GameObject obj = Instantiate(objCell, trsParent);
            obj.GetComponent<ItemCell>().Initialize(_items[i]);   
        }
    }
}

각 버튼 클릭에 따라 동적으로 아이템을 갱신하는 역할을 한다.