Home 유니티 onClick.AddListener에서 함수 파라미터 전달 문제
Post
Cancel

유니티 onClick.AddListener에서 함수 파라미터 전달 문제

유니티에서 버튼에 이벤트 함수를 등록하는 기능을 구현하다가, 파라메터가 있는 함수를 다음과 같이 구현했다.

1
2
3
4
5
6
button.onClick.RemoveAllListeners();
button.onClick.AddListener(() => 
  {
    target = table[i];
    RefleshPanel();
  });

실행해보니 에러가 발생했고, i에 루프의 최대값이 들어가 있었다. 뭔 일인가 해서 찾아보니 나름 알려진 문제였는지 바로 구글신께서 계시를 내려주셨다.

참조한 자료들은 아래와 같다.

[Unity] onClick.AddListener() 함수의 파라미터 전달 문제

유니티 onClick.AddListener에서 함수의 파라미터 전달 문제

다음과 같이 임시 변수를 만들어 처리해야 한다.

1
2
3
4
5
6
7
button.onClick.RemoveAllListeners();
button.onClick.AddListener(() => 
  {
    target = table[i];
    int index = i;
    RefleshPanel(index);
  });

참고한 게시물들에는 이유는 적혀 있지 않지만, 디버거를 돌려본 결과 람다식 내부의 처리는 AddListener()의 실행 시점이 아니라 호출 시점에 이루어졌다. 호출 시점에서는 i가 루프를 한바퀴 다 돈 뒤니 루프의 가장 마지막 값(위의 예시에서는 32였다)이 되어 있는 것.

이게 어떤 원리로 처리되는지는 잘 모르겠는데 나중에 알게 되면 따로 포스팅을 올릴 생각이다.

This post is licensed under CC BY 4.0 by the author.