본문 바로가기
유니티3D[Unity3D]

Unity 버튼 OnClick 함수 안보이는 현상 해결법

by 은유지니 2022. 7. 4.

평소와 같이 유니티 버튼 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으로 바꿔도 해결될 것이다. ((대신 코드가 번잡해질 것 같다))