#. 버튼에 이벤트 할당하기
유니티에서 UI에 동작을 할당 할 때는 간편하게 인스펙터에서
버튼 컴포넌트에 노출되어있는 UnityEvent
에 할당하는 방법이 있다.
쉽고 간편해서 많은 유니티 튜토리얼에서 사용되는 방법이지만,
이 방법은 두 가지 단점이 있다.
1. 할당된 메서드가 visual studio에서 레퍼런스 참조가 안되며,
2. 미리 할당해놔야하기 때문에 동적으로 버튼의 동작을 바꿀 수 없다.
#. AddListener로 버튼에 이벤트 할당하기
때문에 이를 해결하기 위해 Button에 onClick.AddListener
(델리게이트) 형식으로 메서드를 할당하는 방법이 있다.
1. 인자가 없는 메서드 예시
void Awake()
{
// 인자가 없는경우 바로 메소드 이름으로 넘겨주면됨.
button.onClick.AddListener(PressBtnClose);
}
void PressBtnClose() // 인자가 없는 메소드
{
}
2. 인자가 있는 메서드 예시
void Awake()
{
// 인자가 있는 경우 람다 식이나 델리게이트를 사용
button.onClick.AddListener(() => OpenTab(0));
button.onClick.AddListener(delegate { OpenTab(0); });
}
void PressBtnTab(int tabIndex) // 인자가 있는 메소드
{
}
#. 주의사항
for 문 루프 + 람다식으로 Add Listener
를 할 경우, 클로저 문제가 발생하여 제대로 할당이 되지 않을 우려가 있다.
아래의 글을 참조할 것.
for 문에서 AddListener 람다식은 주의해야한다. (AddListener for loop)
# 문제는 무엇인가? 버튼을 배열로 선언해놓고 for문에서 AddListener로 할당하려고 했는데, 모두 마지막 값으로 초기화되는 현상이 있었다. for (int i = 0; i < Btns.Length; i++) { Btns[i].onClick.AddListene..
mentum.tistory.com
'🌍 Unity > UI & TMP' 카테고리의 다른 글
HorizontalLayoutGroup / VerticalLayoutGroup update 레이아웃 업데이트 문제 (0) | 2020.04.03 |
---|---|
유니티 TextMeshPro 한글 폰트 생성 설정 정리 (0) | 2020.03.30 |
Raycaster로 버튼 누르기 (2) | 2019.12.17 |
InputField AddListener로 이벤트 등록 (0) | 2019.11.26 |
TextMeshProUGUI DoText (0) | 2019.11.08 |