유니티 버튼 이벤트 할당 Unity Button AddListener injection

 

유니티 이벤트로 직접할당하는방법은 간편하지만

세가지 문제점이있다.

 

1) 함수이름바꾸면 참조 다 깨짐.
2) 레퍼런스 보려면 일일히 인스펙터 찾아가야 함
3) 참조된게 CodeLens에 안 나타남

 

따라서 이벤트 Action으로 주입하는 방법을 사용하기도 한다.

 

// 방법 1 : AddListener로 함수 할당하기. 에디터상에서는 안보이니 주의
public class StartFlowManager : MonoBehaviour
{
    [SerializeField] Button Btn_Title_popup;
    [SerializeField] GameObject Title_Popup;

    private void Awake()
    {
        Btn_Title_popup.onClick.AddListener(PressBtnTitlePopup);
    }

    void PressBtnTitlePopup()
    {
        Title_Popup.SetActive(false);
    }
}

 

// 방법2 : 람다식으로 할당하기
public class StartFlowManager : MonoBehaviour
{
    [SerializeField] Button Btn_Title_popup;
    [SerializeField] GameObject Title_Popup;

    private void Awake()
    {
        Btn_Title_popup.onClick.AddListener(()=>Title_Popup.SetActive(false));
    }
}

 

// 방법3 : 외부에서 할당하기
public class StartFlowManager : MonoBehaviour
{
    [SerializeField] Button Btn_Title_popup;

    public void SetBtnAction(Action action)
    {
        if(action != null)
            Btn_Title_popup.onClick.AddListener(action.Invoke);
    }
}

public class OtherManager : MonoBehaviour
{
    [SerializeField] GameObject Title_Popup;
    [SerializeField] StartFlowManager StartFlowManager;

    private void Start()
    {
        Action action = () => Title_Popup.SetActive(false);
        StartFlowManager.SetBtnAction(action);
    }
}

 

 

 

혹 for문을 사용하여 할당할때는 주의하자.

2019/12/12 - [C# Study] - for 문에서 람다식은 주의해야한다. (AddListener for loop)

 

 

 

댓글

Designed by JB FACTORY