내일배움캠프 Unity 20일차 TIL - Unity 게임 개발 입문 1주차

Wooooo·2023년 11월 24일
0

내일배움캠프Unity

목록 보기
22/94

오늘의 키워드

오늘은 Unity 게임 개발 입문 1주차 강의를 들었다.
강의에 나온 Unity pakage인 Input System에 대해 정리해보려한다.


Input System pakage

소개

공식 docs에서 말하길, 모든 입력기기를 이용하여 유니티의 컨텐츠 제어를 구현하는 시스템이라고 한다. 기존의 UnityEngine.Input보다 강력하고 유연한 기능이라고 소개하고 있다.

설치

Menu: Window/PakageManager에서 Input System Install

Input Action

설치를 완료하면, Input Action이라는 에셋이 생긴다.
이 에셋을 열어보면 아래와 같은 모습을 볼 수 있다.

Input Action Asset

이 화면에 보이는 키워드들 중에 큼지막한 녀석들을 훑어보자.

Control Schemes

필요에 따라 게임에 여러가지의 제어 체계가 필요할 수 있다. PC에서는 키보드와 마우스, 콘솔에서는 패드, 모바일에서는 터치스크린 등등... 각각의 제어 체계를 설정하는 창이다.
스키마가 바뀌어도 밑에서 소개할 ActionMapAction의 구조는 바뀌지 않는다.
대신, Action에 바인딩 되는 키는 다르게 할 수 있다!

Action Map

매핑은 key와 value를 쌍으로 이어주는 것을 말한다. Action MapAction들을 value로 갖는다.
위의 이미지를 예시로 들면 Player라는 key가 있고, 아마 저 Action Map 안에는 플레이어를 조작하기 위한 Action들이 들어 있을 거다.
마찬가지로 UI라는 Action Map 안에는 UI를 조작하기 위한 Action들이 들어있을 것이다.

Action

Action은 입력에 따른 행동을 구현한다. C#의 delegate인 그 Action과 아주 유사하다!
사실 값을 반환한다는 점에선 Func에 더 가까운 것 같긴 하지만...

위 이미지를 보자마자 받는 느낌이 있다. Move 액션에는 WASD, 방향키가 들어있고 Look 액션에는 포인터가 들어있다. WASD와 방향키로 움직이고 마우스 포인터로 조준하는 느낌적인 느낌이 든다.

Properties

Action에는 3개의 속성(property)가 있는데 Action, Interactions, Processors가 있다. 여기서 가장 큼지막한 놈은 Action 밑에 있는 Action TypeControl Type인데, 이 녀석들의 역할은 다음과 같다.

  • Action
    • Action Type : 키 입력 판단을 어떻게 할 것인지 정한다.
      • Value : 입력의 값에 따라 결정된다. (ex 방향키로 이동할 때 +,-값)
      • Button : 버튼이 눌렸는지 눌리지 않았는지에 따라 결정된다. (ex 점프)
    • Control Type : 반환할 값의 자료형을 정한다.

Binding

Action 밑에는 Binding들을 만들 수 있다. 이 곳에서 원하는 키를 바인딩하고, 그 키마다 Action의 값이 어떻게 될지 등을 정할 수 있다.

PlayerInput Component

PlayerInput 컴포넌트를 오브젝트에 적용시키면, 해당 오브젝트에 new Input System을 적용 시킬 수 있다.

Actions : 위에서 만든 Input Action Asset을 넣어준다.
Behavior : 인풋에 대한 알림을 공지(Notipication)하는 방법을 정한다. 옵저버 패턴의 그것이 맞다!

Behavior설명
SendMessagesMonoBehaviour를 상속받는 오브젝트라면 사용할 수 있는 그 SendMeesage()를 이용하여 호출한다.
BroadCastMessagesMonoBehaviour를 상속받는 오브젝트라면 사용할 수 있는 그 BroadCastMessage()를 이용하여 호출한다.
InvokeUnityEventsUnityEvent를 호출한다. 인스펙터에서 스크립트를 받아와서 지정할 수도 있다.
InvokeCSharpEventsC# Event를 호출한다. 대신 위의 UnityEvent와는 달리 인스펙터에서 지정할 수 없어서 스크립트 내부에서 구독시켜줘야한다.

마치며

예~전에 Command Pattern을 배울 때 "사용자 지정 키 설정"을 만들어보며 실습한 적이 있었는데, 이 기능을 이용하면 복잡한 인터페이스의 상속 없이도 쉽게 구현할 수 있을 것 같다!


참고 자료

https://daekyoulibrary.tistory.com/entry/Unity-New-Input-System-1
https://d-dl.tistory.com/139
https://docs.unity3d.com/Packages/com.unity.inputsystem@1.4/manual/Components.html

profile
game developer

0개의 댓글