작성
·
279
0
분명 OnButtonClicked 을 public로 했는데 위에 사진에는 나오질 않습니다.
유니티를 실행했을 때 버튼을 눌러도 점수는 당연히 올라가지 않고 이게 머선일인지 모르겠습니다..
제가 어떤 부분을 잘못하고 있는지 모르겠습니다
밑은 제 UI_Button 스크립트입니다
public class UI_Button : UI_Base
{
enum Buttons
{
PointButton,
}
enum Texts
{
PointText,
ScoreText,
}
enum GameObjects
{
TestObj,
}
enum Images
{
ItemIcon,
}
private void Start()
{
Bind<Button>(typeof(Buttons)); // 리플렉션 : 객체를 통해 클래스 정보를 분석해 내는 프로그래밍 기법
Bind<Text>(typeof(Texts));
Bind<GameObject>(typeof(GameObjects));
Bind<Image>(typeof(Images));
GetButton((int)Buttons.PointButton).gameObject.AddUIEvent(OnButtonClicked);
GameObject go = GetImage((int)Images.ItemIcon).gameObject;
AddUIEvent(go, (PointerEventData data) => { go.transform.position = data.position; }, Define.UIEvernt.Drag);
}
int _score = 0;
public void OnButtonClicked(PointerEventData data)
{
_score++;
GetText((int)Texts.ScoreText).text = $"점수 : {_score} 점";
}
}
답변 3
2
1)
우선 툴에서 드래그-드롭으로 함수를 연동할 때는
함수에서 아무 인자나 막 받으면 안 됩니다.
위와 같이 인자를 안 받는 버전으로 하나를 만들어주면,
정상적으로 툴에서 드래그-드롭 연동이 드는 것을 확인할 수 있습니다.
2)
PointerEventData를 받는 버전은 툴에서 드래그-드롭으로 연동하는게 아니라
자동으로 코드에서 연동이 되게 됩니다.
그럼에도 함수 콜백이 작동하지 않는 이유는
AddUIEvent 내부에서 오타를 내셔서
-= 하고 +=를 해야 하는데 이를 거꾸로 하시는 바람에
기껏 추가한 콜백 함수를 다시 제거해줘서,
호출되지 않은 것입니다.
1
위 스샷만으로는 원인 파악이 되지 않는데,
일단 cs 파일을 저장한 것이 맞는지 (*없는지) 확인해보시고
혹시 모르니 모든 문제의 해결책인 유니티 껐다켜기(aka. 껐키)를 시전해보시고
그래도 해결이 안되면 전체 프로젝트 압축해서 rookiss@naver.com로 보내주시기 바랍니다.
0
선생님덕에 저의실수를 찾았습니다 하마터면 못찾고 죄없는 유니티를 탓할뻔했군요 감사합니다 선생님