inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

InputManager를 만드는 부분에서 질문이 있습니다.

338

이수빈

작성한 질문수 1

0

1) KeyAction.Invoke( )는 해당 delegate를 구독한(delegate에 할당된) 아이들에게 "이 이벤트 발생했어!"라고 전파하는 함수라고 이해했는데 맞나요?

* 어제 질문으로 올려두었던 "Action delegate가 key입력 시 어떻게 아나요?"는 PlayerController의 Start함수에서 해당 delegate에  OnKeyBoard()라는 함수(키 입력을 검사)를  할당해주었기 때문에 Invoke를 해서 받아온 키입력 메시지를 처리하였다고 이해했습니다.

C# unity

답변 2

1

Rookiss

안녕하세요,

1) 이해하신 것이 맞습니다. KeyAction을 신문이라 비유하면, "KeyAction += OnKeyBoard"는 "신문 구독 신청을 할테니, 관련해서 새로운 소식이 있으면 OnKeyBoard로 알려줘~" 정도로 이해하면 되겠습니다. 참고로 delegate의 operator+은 컴파일러가 내부적으로 Delegate.Combine으로 변환해서 처리합니다. 최종적으로 KeyAction.Invoke()를 하면 위에서 += 한 모든 함수들이 호출이 됩니다. (구독 신청을 한 구독자들에게, 각자가 희망한 방법으로 알림을 보내는 것)

2) Action delegate는 그냥 새로운 소식을 알리는 도구일뿐, key 입력이 되었다는 것을 알 수는 없습니다. 초반 코드에서는 Managers가 매 틱마다 Update를 하면서, InputManager의 OnUpdate를 불러주고 있습니다. OnUpdate에서는 Input.anyKey를 확인하는데 이는 유니티에서 제공하는 기능이며 "키보드/마우스가 입력되었으면 true, 아니면 false를 반환"하기 때문에 이를 통해서 delegate Invoke를 할지 말지를 결정하고 있습니다. 아무 키나 눌렸으면 일단 '무엇인가 눌렸다'는 사실을 Invoke를 통해서 알려주고, OnKeyBoard에서 세부적으로 어떤 키가 눌렸는지를 다시 판별해서 구현을 하고 있습니다. (물론 이렇게 보면 굳이 delegate를 받지 않고, PlayerController의 Update에서 프레임마다 체크해도 별 차이는 없습니다)  유니티에서는 매 프레임마다 Input에 있는 정보들을 갱신해주고 있는데, Input.anyKey를 비롯해 GetButton, GetButtonDown, GetButtonUp 등 유용한 시리즈들이 많이 있습니다. 따라서 굳이 InputManager를 사용하지 않아도 되는 경우가 대부분이지만, 그럼에도 [클릭] [마우스 드래그]와 같이 우리가 커스텀으로 제공하고 싶은 이벤트가 있다면 InputManager와 같은 중앙 처리 시스템에서 한 번만 체크해서 이벤트를 뿌려주는 것도 괜찮은 방법입니다.

감사합니다

0

이수빈

정말 좋은 답변 감사합니다 :) 

좋은 강의 정말 잘 보고 있습니다. 한층 더 성장할 수 있는 기회가 되어 굉장히 좋습니다.

UI 기능 관련 질문이 있습니다!

0

37

2

픽셀 좌표 스크린 좌표

0

33

0

전체적으로 코드 읽는게 굉장히 오래 걸리네요...

0

75

2

카메라 #2 수업 캐릭터 쓰러짐 해결

0

84

1

플레이어 움직임이 끝날때, 기울어짐 현상

0

84

1

Input 적용과 관련하여 질문 있습니다.

0

75

1

디버그 불가.. Unity에 연결 불가

0

83

1

달리기 애니메이션 에러

0

89

2

오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다

0

66

1

GetKey 오류

0

110

2

에셋을 어디에 올려두신지 알 수 있나요?

0

107

1

재귀호출? 오류나는데 왜 이래요 ?

0

169

6

Animation blending 파라미터 계산

0

69

1

newPos와 to지점이 겹쳐져야 하는거 아닌가요?

0

97

3

오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다

0

88

2

질문있습니다

0

143

2

아 이거 소스코드 같은거 없나요?

0

142

3

질문 드립니다. string.IsNullOrEmpty(name)

0

87

2

@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?

0

136

2

유니티6 NavMesh 안되는분들

1

176

1

Unity6 Unity-Chan Material 마젠타 문제 해결법

7

529

1

GetComponent<Poolable> 질문드립니다.

0

102

2

UI 불러오지 못함

0

119

2

UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.

0

155

2