• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

계속 의문이 듭니다

21.01.29 02:19 작성 조회수 209

2

이전강의에서 부터 좀 의문이 가던 건데 유니티 문서를 찾아보니까 더 헷갈려서요

지금 구조가 

InputManger.OnUpdate() - 키보드/마우스가 눌러졌는지 감지 (Input.anyKey 혹은 Input.GetMousebuttonDown을 사용)

각 Input마다 정의된 Action을 Invoke

각 Action을 구독하고 있는 함수들에게 Event 발생을 알림

(현재로선, PlaterController.cs의 OnKeyBoard(), OnMouseClicked)

거기다

Manager.cs에서 각 매니저들의 인스턴스를 들고 있고

Manager.cs의 Update() 속에서 _input.OnUpdate()를 불러주도록 되어있습니다

이런 구조랑 설명에 대해서 이해는 가거든요

나중에 디버그 할 때나 기능을 추가할 때, 딱 필요한 부분만 찾아서 거기서만 작업해주겠구나 하는 느낌은 드는데

100% 납득이 안갑니다 굳이 이렇게까지 많이 쪼개야 하나 하고요

아직 기능이 많이 추가 된게 아니라서 이렇게 쪼개는 단계가 너무 많아 보여서 그런걸까요?

답변 6

·

답변을 작성해보세요.

2

Hyobin Kim님의 프로필

Hyobin Kim

질문자

2021.01.29

와 대박 어제 공부한거라 혹시나 했는데 맞네요

강의 듣기 전에는 질문은 어떻게 해야 하나 했는데 

이렇게 답변 잘 해주셔서 정말 감사드려요

지금 이거 말고도 Unity C#시리즈 다 구매해두고 다 공부하는날을 기다리고 있는데

그 와중에 이렇게 피드백을 잘해주셔서 더욱 든든합니다

아, 유니티 끝나면 얼마전에 발표하신 C++ 언리얼도 들을겁니다

강사님덕분에 공부복 터졌습니다 ㅋㅋ

2

네 바로 그 Observer 패턴이 맞습니다 ㅎㅎㅎ

유니티의 Input은 누르고 있는지, 처음으로 눌렀는지, 떼고 있는지 등을 판별할 땐 좋지만
더블 클릭이라거나, 드래그와 같은 것을 자동으로 인지해주진 않습니다.
(사실 드래그라는게 마우스를 몇초 이상 눌러야지 드래그인지, 주관적이죠)

그런 부분은 자체적으로 이전 상태를 저장하면서 우리가 직접 처리를 해야 하는데,
그런 경우라면 InputManager가 중앙에서 처리해서 뿌리는 방식을 채택하면 편합니다.

0

Hyobin Kim님의 프로필

Hyobin Kim

질문자

2021.01.30

아 그건 제가 캐나다 살고 있어서요ㅎ

일을 집에서 하는터라 쉬는시간마다 한강씩 듣거든요 아니면 전날 들은거라 

그래서 시간대가 항상 그래요 ㅎㅎ

다시 한번 감사드립니다

0

도움이 됐다니 다행입니다 ㅎㅎ

답변이 달린 시간대를 보니 저 못지 않은(?) 올빼미족(?) 같아 보이는데
IT는 평생 공부이므로. 잠은 주무시면서 공부하시기 바랍니다.

0

Hyobin Kim님의 프로필

Hyobin Kim

질문자

2021.01.29

알겠습니다

그럼 조금 원론적인 질문으로

말씀하신걸 예시로 들면 마우스라는 장치에서 다양한 인풋이 들어오는걸 InputManager가 받아서 그걸 분류해서 PlayerControlelr로 쏴주는 형식의 코딩이 많은 편인가요?

다른 곳에서 공부한 Oberser Pattern이랑 매우 비슷한거 같이 보여서요 

관련이 있나요?

0

InputManager는 잊어주시기 바랍니다.
제 이전 프로젝트에서는
클릭 기반의 게임이라서 사용하면 편리한 점이 많았는데
(클릭, 더블클릭, 드래그 이벤트 발생 등)
사실 터치 기반이나 키보드 방식의 게임이라면
유니티의 Input 클래스에서 제공하는 static 기능들을 활용하는게 더 편리합니다.
그런 이유로 Part7부터는 InputManager는 제거하고 진행됩니다.