• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

Delegate를 옮길때

21.09.02 01:28 작성 조회수 80

0

GameData.cs에다가 public delegate void OnClicked();를 옮길때, 제가 실수로 Util 클래스 안에다가 넣어버렸습니다

그랬더니, 아래 함수에서 

"            popUp.SetListenerYes(onClickYes);

            popUp.SetListenerNo(onClickNo);"

이 부분에서 onClickNo라고 되어 있는 부분에서 오류가 납니다

위의 Argument 자리에서는 괜찮은데 왜 아래서 오류가 생기는 건지 이해가 안갑니다

오류는 이러합니다 "        public delegate void OnClicked();

"

        public static void CreatePopUp(GameObject prefab, GameObject parent, OnClicked onClickYes, OnClicked onClickNo, int id)
        {
            GameObject GO_PopUp = GameObject.Instantiate<GameObject>(prefab, parent.transform, false);
            PopUp popUp = GO_PopUp.GetComponent<PopUp>();

            popUp.SetListenerYes(onClickYes);
            popUp.SetListenerNo(onClickNo);

            popUp.Text_PopUpContent.text = string.Format("Do you want to buy {0}", GameDataManager.instance.ships[id].name);
        }

답변 1

답변을 작성해보세요.

0

안녕하세요.

public delegate void OnClicked(); 의 코드는 선언부라고 생각할 수 있습니다.

딜리게이트가 함수를 저장할 수 있는 변수 이고 OnClick 이라는 딜리게이트(함수를 저장하는 변수)의 선언이라는 것을 정의 한 것이죠. 입력이 없고 출력이 없는 함수 형태의 딜리게이트를 사용하겠다는 뜻입니다.

Util 클래스에  넣었다는 이야기는 정의부가 거기로 옮겨갔기에 아마 그쪽 네임스페이스가 Game 이겠죠

using Game 하면 되지 않을까 생각되는데요.

그리고 onClickYes 와 onClickNo 의 실제 구현부가 있어야 동작할텐데요. 

이 소스에서는 안보이는데 혹시 같은 코드안에 함수가 존재하죠? 

onClickYes 와 onClickNo 도 사실 함수를 보면 입력이 없고 출력이 없는 함수입니다. 

그러니까 public delegate void OnClicked(); 라는게 있어야 SetListenerYes 나 SetListenerNo 에서 OnClicked 형태의 딜리게이트(함수를 저장하는 변수) 를 받는 다는 것이죠.

이게 이해가 잘 안되면 이전내용들을 몇일 간격으로 봐보세요.

저도 처음에 이해하기 어려웠는데 몇번 그렇게 해보시면 왜 이걸 이해못했지 하는 생각이 들겁니다. 

제가 생각하기에는 몇일간 보다보니 쉬운 내용들이 당연하게 이해되고 나서 추가적인 정보가 들어오면 정말로 당연하게 이해가 되는 것 같더라고요. 

좋은 하루 되세요 ^^