🌍 Unity/유니티 엔진 동작 관련
유니티 버튼 이벤트 할당 Unity Button AddListener injection
맨텀
2019. 12. 11. 18:12
유니티 이벤트로 직접할당하는방법은 간편하지만
세가지 문제점이있다.
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)