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

강아지호빵찐빵님의 프로필 이미지
강아지호빵찐빵

작성한 질문수

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

Input Manager

InputManager의 작동 원리가 잘 이해되지 않습니다.

작성

·

312

0

InputManager의 작동 원리가 잘 이해되지 않습니다. 그래서 디버깅으로 한 줄 한 줄 따라가 봤는데, 여전히 궁금한 점들이 있습니다.

1. 왜 InputManager _input = new InputManager();를 읽은 뒤 Init()를 다시 실행해서 DonDestroyOnLoad(go);를 읽는 건가요? Init();은 Start에 들어 있으니 첫 실행 때 한 번 호출되고 끝이어야 하는 게 아닌가요?

2. Managers의 업데이트에서 OnUpdate를 계속 호출해 줘서 키 입력을 감지하는 건 알겠는데 키 입력이 들어온 뒤 KeyAction.Invoke();가 어떤 역할을 하는지 모르겠습니다. 혹시  InputManager에서  if( KeyAction != null)일 경우 바로 OnKeyboard()를 호출하는 게 문법적으로 불가능하기 때문인가요?

답변 1

0

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

1.
Init()은 UIManager와 직접적인 연관이 없고,
Managers 자체를 만들어주기 위한 것입니다.
Start에 의해 Init()이 호출되기는 하지만,
그게 동작하려면 Managers 스크립트를 GameObject에 붙여준 다음,
해당 GameObject를 Scene에 배치해야 합니다.
그 부분을 누락할 수도 있으니 없으면 직접 코드로 GameObject를 만들어주고, 스크립트를 붙인 겁니다.
if (s_instance == null) 체크는 [아직 안만들어졌으면 만드는 부분]입니다.

2.
콜백 함수와 delegate에 대한 이해가 필요합니다.
C# delegate 문법을 아신다는 가정하에 설명드리자면
KeyAction에 우리가 호출되기 원하는 함수들을 등록할 수 있는데,
Invoke()를 하는 순간 KeyAction에 등록된 함수들이 호출됩니다.
입력이 들어오면 -> 우리가 등록한 함수를 호출
하는 형태로 코드가 돌아가는건데
이 부분이 이해 안 가시면 그냥 넘어가도 됩니다.
InputManager는 너무 많은 분들이 어려워하고
꼭 필요한 애는 아니라서 다음 파트부터는 삭제됩니다.

강아지호빵찐빵님의 프로필 이미지
강아지호빵찐빵

작성한 질문수

질문하기