인프런 커뮤니티 질문&답변

윤동근님의 프로필 이미지
윤동근

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

UI 자동화 #4

마지막 점수올리기 부분에서 막혔습니다.

작성

·

280

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

Rookiss님의 프로필 이미지
Rookiss
지식공유자


1)
우선 툴에서 드래그-드롭으로 함수를 연동할 때는
함수에서 아무 인자나 막 받으면 안 됩니다.
위와 같이 인자를 안 받는 버전으로 하나를 만들어주면,
정상적으로 툴에서 드래그-드롭 연동이 드는 것을 확인할 수 있습니다.

2)

PointerEventData를 받는 버전은 툴에서 드래그-드롭으로 연동하는게 아니라
자동으로 코드에서 연동이 되게 됩니다.
그럼에도 함수 콜백이 작동하지 않는 이유는
AddUIEvent 내부에서 오타를 내셔서

-= 하고 +=를 해야 하는데 이를 거꾸로 하시는 바람에
기껏 추가한 콜백 함수를 다시 제거해줘서,
호출되지 않은 것입니다.

선생님덕에 저의실수를 찾았습니다 하마터면 못찾고 죄없는 유니티를 탓할뻔했군요 감사합니다 선생님

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

위 스샷만으로는 원인 파악이 되지 않는데,
일단 cs 파일을 저장한 것이 맞는지 (*없는지) 확인해보시고
혹시 모르니 모든 문제의 해결책인 유니티 껐다켜기(aka. 껐키)를 시전해보시고
그래도 해결이 안되면 전체 프로젝트 압축해서 rookiss@naver.com로 보내주시기 바랍니다.

0

윤동근님의 프로필 이미지
윤동근
질문자

껏다가 켜도 같은 상황이라 메일로 보냈습니다

윤동근님의 프로필 이미지
윤동근

작성한 질문수

질문하기