평소와 같이 유니티 버튼 OnClick()에 함수 이벤트를 등록하려고 하였다.
함수가 public으로 되어있는데도 불구하고 OnClick() 목록에 해당 함수가 보이지 않았다.
이를 해결한 방법을 해당 포스트에서 공유해보려고 한다.
<OnClick 목록에 함수가 안보이는 현상 관련 주의사항들>
1. 함수가 private인지 확인한다.
- 함수가 private이라면 목록에 보이지 않는다. private이라면 public으로 바꿔준다.
2. 함수의 파라미터 타입이 enum인지 확인한다.
- 파라미터가 enum 타입이여도 보이지 않는다.
3. 함수에 리턴값이 존재하는지 확인한다.
- 리턴값이 존재해도 목록에 보이지 않는다.
2번 : 함수의 파라미터 타입이 enum인지 확인한다. 에 대한 해결책 2가지
1. AddListener로 버튼에 이벤트를 할당(람다식이나 delegate 활용)
public Button btn;
enum GameState{
Ready,
Play,
End
}
void Awake(){
//람다식 이용
btn.onClick.AddListener(() => EnumFunc(GameState.Play));
//delegate 이용
btn.onClick.AddListener(delegate { EnumFunc(GameState.Play); });
}
public void EnumFunc(GameState state){
// ... 함수내용
}
이렇게 작성한 다음, 에디터에서 public으로 할당된 버튼에 해당 버튼 오브젝트를 드래그하면 해결된다.
2. 파라미터 타입을 다른 타입으로 변경
- enum이 아닌 정수형이나 string으로 바꿔도 해결될 것이다. ((대신 코드가 번잡해질 것 같다))