[Unity] 버튼 설정 중에 Method arguments are incompatible오류

jh Seo·2022년 8월 29일
0

유니티

목록 보기
11/42

개요

btn_Retry.onClick.AddListener(()=>sceneManager.Instance.enterMenu());

스크립트의 onEnable함수에서 버튼 리스너를 동적할당해줬다.

하지만, 막상 실행하고 버튼을 클릭해보니 Method arguments are incompatible 오류가 계속 떠서 당황했다.

찾아보니 저 오류는 버튼클릭에서 호출하는 함수의 인자가 모순적이라는 뜻이였다.
하지만 호출하는 함수는 그냥 메뉴 씬 불러오는 함수로 인자가 없어서 이해가 안 되었다.

해결 방안

그 후 버튼의 onclick갯수도 체크하라는 글이 있어서 체크했더니

이렇게 빈 리스너가 있었고 이게 문제인가 싶어서 밑의 -버튼을 눌러 빈 리스너를 제거한 후 실행하니 잘 되었다.

이유

  1. 버튼이 처음에 disable된 상태라 혹시 disable된 상태에서 AddListener 함수가 작동하지 않는건가 싶어서 새로 빈 버튼을 만들어 실험해본 결과 상관없었다.

  2. 저 빈 온클릭메소드가 문제인가 싶어서 빈 유니티 프로젝트를 실행하여 실험해봤다.
    그냥 단순히 빈 리스너를 추가한 후 실행해보니 오류는 뜨지않고 클릭해도 아무 반응이 없었다.

  3. 빈 리스너를 추가한 후 스크립트를 이용해 콘솔에 "안녕" 출력하는 AddListener를
    달아 주자 오류는 뜨지않고 정상적으로 실행이 되었다.

  4. 글을 더 찾아보니 버튼에 할당한 게임 오브젝트를 변경하거나 삭제시 저렇게 오류 뜬다고 했다.
    분명히 그렇게 삭제하면 none이 아니라 missing 으로 뜨는걸 봤기에 실험해봤다.

  5. 처음에 삭제해보니 missing으로 뜨고 오류가 난 이후에 missing이 none(object)로 바뀌었다!

  6. 결론 :
    none 리스너가 문제가 아니라 할당한 후 그 오브젝트를 삭제하거나 변경하면 missing리스너가 none리스너로 바뀐 후 저 오류가 뜬다. -> 오브젝트 함부로 삭제하지 말자

레퍼런스

링크텍스트

profile
코딩 창고!

0개의 댓글