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

닥부님의 프로필 이미지
닥부

작성한 질문수

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

Input Manager

구독했다는 말의 의미를 이해하기가 어렵습니다.

해결된 질문

작성

·

268

2

안녕하세요. 강좌 잘보고있습니다.

제가 c# 기초 강좌랑 유니티랑 병행하면서 듣느라 문법 지식이 딸려서인지, 첨부한 이미지의 의미를 이해하기가 어려워 질문드립니다.

1.  += Onkeyboard 라는 표현이 이해가 안갑니다.

Manager.Input.KeyAction 까지는 싱글턴 패턴으루

Managers.cs의 InputManger 를 가져왔다구 이해를 하였는데 

그다음에 붙은 += Onkeyboard 라는 표현이 이해가 안갑니다.

구독이라는것은 무엇이 무엇을 참조 한다는건지요?

아니면 Onkeyboard()의 내용을 InputManager와 병합했다는건지요?

-

2. 해당 코드가 왜 void Start(){    } 내부에 위치해야하는지 이해가 안갑니다. 

해당 매서드 밖에서 선언하면 안되나요?

void Start()에 위치해야하는 이유가 있나요?

다른 부분들은 나름대로 구글링 해본다고 했는데

위 내용들만 제가 찾을수 없어서 질문드립니다 ㅠㅠ

만약에 너무 질문이 수준 이하라고 생각되시면 키워드만 던져주세요! 제가 그부분을 공부해보겠습니다. 

답변 2

2

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

안녕하세요,
해당 문법과 관련된 강의는 Part 1 섹션7 - Delegate/Event 문법이니
일단 그쪽부터 살펴보시길 바랍니다.

구독에 대한 내용이 나오는 것은 이 부분이 [Observer] 패턴과 연관이 깊기 때문입니다.
우리가 어떤 신문을 구독 신청하면, 그 신문이 새로 출판될 때 집으로 배달 되겠죠.
마찬가지로 Action에 해당하는 변수에 += 를 해주면, 신문을 구독하듯
[이 Action에 관심이 있으니까, Invoke 이벤트가 발생하면 이 함수를 호출해서 나한테도 알려줘]라는 연결을 해주는 셈입니다.
따라서 InputManager에서 Invoke()를 호출하면 += 로 연결한 모든 함수들이 호출되게 됩니다.

Start 내에 연결해준 이유는, 그냥 딱 한 번만 연결해주면 되기 때문입니다만,
Start가 아니라 다른데서 해도 딱히 무방합니다.
추가로 Start 내부에서 Managers.Input.KeyAction += OnKeyboard를 하면
사실상 += PlayerController.OnKeyboard를 연결해준 셈이 되는데,
OnKeyboard 함수는 static이 아니기 때문에
실제로 Start()가 호출된 PlayerController 객체를 기억해서,
나중에 Invoke가 발생하면 그 기억한 객체의 OnKeyboard가 호출됩니다.

0

닥부님의 프로필 이미지
닥부
질문자

ㄴ  도움이 되었습니다! 감사합니다!!

닥부님의 프로필 이미지
닥부

작성한 질문수

질문하기