- Input System
1. 사용하는 이유
유니티에 존재하는 Input System을 사용하면 어떠한 입력 값을 받았을 때 특정 함수들을 실행하는 이벤트를
만들 수 있습니다. Input System의 장점은 플랫폼 대응이 좋다는 점인데, 우리가 키보드 뿐만아니라
조이스틱, XR과 같은 입력장치들을 편하게 추가하거나 수정할 수 있다는 점입니다.
2. 사용하는 방법
프로젝트 뷰에서 Create -> Input Actions을 추가하여 입력값이 발생했을 때 실행할 Action들을 설정할 수 있습니다.
- Button Type
+를 클릭해 Action을 추가할 수 있으며, 해당 Action들은 각각의 Action Type이 존재합니다.
크게 Button 타입과 Value 타입으로 나눌 수 있는데,
Button 타입의 경우 단순히 어떤 버튼이 눌렸을 때 액션 함수를 실행 하겠다라는 의미로 받아들이셔도 무방합니다.
Action의 +버튼을 눌러 Binding을 추가할 수 있습니다.
Binding의 Path는 어떠한 입력값을 감지할 것인가라고 보시면 됩니다.
위 사진에서는 키보드의 스페이스바의 입력을 감지하도록 설정하였습니다.
따라서 Player의 Jump 액션은 키보드의 스페이스바의 입력을 받으면 실행됩니다.
-Value Type
Value타입의 경우 Control Type을 수정해 어떠한 입력(버튼)이 들어왔을 때 반환되는 값을 설정할 수 있습니다.
위 사진에서는 Vector2로 설정하였습니다.
Binding을 추가할 때 UP,Down,Left,Right Composite를 클릭하게되면
상하좌우의 입력값을 받아볼 수 있습니다.
Binding의 속성에 들어가시면 path와 Composite Part를 확인하실 수 있는데
Path는 어떤 키입력을 받을 것인지, Composite Part는 해당 키입력을 받았을 때 반환되는 Vector2의 값입니다.
Up은 Vector2(0,1), Down은 Vector2(0,-1), Left는 Vector2(-1,0), Right는 Vector2(1,0)을 반환합니다.
만약 액션의 Value를 Vec3로 설정했다면 Z축의 값도 반환할 수 있습니다.
- 오브젝트에 연결하기
이렇게 작성한 Input Action을 사용하기 위해선
오브젝트의 PlayerInput Component를 추가하고 Actions의 만들어둔 Input Action을 할당해야합니다.
Player Input 컴포넌트의 Events를 열고 그안에 만들어둔 Action Map(현재는 Player)을 열어보면
만들어둔 Action들이 존재합니다.
따라서 해당 Action이 호출될때 실행해야하는 함수들을 연결하면, 이제 해당 Action을 호출시키는 입력값이
들어온다면, Action이 호출되어 연결 시켜놓은 함수들이 실행되게 됩니다.
- Input Action의 기능
해당 함수를 실행할 때 매개변수로 InputAction.CallbackContext를 사용하면 키를 입력 받았을때, 받는중, 키를 땠을때와 같은 값들과 더불어 많은 상황들에 유동적으로 대처할 수 있게 됩니다.
위에서 나온 내용만 간략하게 설명하자면
InputActionPhase.Performed의 의미는 키를 누르고있을때를 의미합니다.
.ReadValue<반환타입>()의 의미는 해당 Action이 실행되었을때 반환되는 값을 가져올 수 있습니다.
이처럼 InputSystem은 처음에 구성하기는 조금 복잡할지 몰라도 만들어 놓고 나면
이후 플랫폼 대응이나 입력값의 의한 상황처리등 유지보수면에서 좀더 편리하게 사용할 수 있다는 장점이 있으므로
사용해보는 것도 좋은 것 같습니다.
'Unity' 카테고리의 다른 글
Unity Scriptable Object (0) | 2024.02.05 |
---|---|
Unity UnityEvent (0) | 2024.02.02 |
Unity Action (0) | 2024.01.23 |
#Unity[PhotonPun2] PhotonView, RPC (0) | 2024.01.22 |
Unity Animator Controller 변경, RectTransform (0) | 2024.01.19 |