New Input System은 기존의 Input Manager의 문제점인
플랫폼 간의 키 연동 문제를 개선하기 위해 나온 툴입니다.
또한, 위 사진처럼 키 매핑을 보기 쉽게 만들어서 개발자가 한눈에 어떤 키가 있는지 파악할 수 있습니다.
설치
일단 저는 Unity 6에서 진행했고 2018.3 버전부터 input system을 지원하는 걸로 알고 있으니 참고해 주세요.
우선
Window
|
Package Manager
|
Unity Registry
에 들어갑니다.
그다음에 검색 창에 input 만 쳐서 나오는 Input System을 install 해줍니다.
그러면 위 사진처럼 설치가 됩니다.
Samples 메뉴에 다양한 예제들이 있으니 이를 참고하셔도 됩니다.
키 등록
키를 등록하기 위해서는 먼저, Project 창에서 오른쪽 마우스를 클릭하고 Create -> Input Actions을 클릭해 줍니다.
그러면
이런 식으로 지도 아이콘의 Input Action이 생성됩니다.
그리고 해당 Input Action을 더블 클릭해서 열면
요런 창이 나오게 됩니다.
가장 먼저 해줘야 할 건 오른쪽 상단에 있는
요기서 Auto-Save를 클릭해 줍니다.
다 만들어 놓고 저장 안 해서 왜 안되지 하면서 시간 날릴 수도 있습니다.
왼쪽 상단에 + 버튼을 누르면 New action map이 생성됩니다.
저는 이걸 Player로 이름을 바꾸겠습니다.
이름 바꾸는 방법은 New action map에 오른쪽 클릭해서 rename 하시면 됩니다.
그다음 오른쪽을 보시면 이런 화면이 나오는데 여기서 키 등록을 하게 됩니다.
먼저, WASD 키로 캐릭터를 움직여 보겠습니다.
New action을 rename 해서 Move로 바꿉니다.
지금 보시면 대충 Action Maps와 Actions 과의 관계를 이해하실 수 있는데요
Player 안에 Move, Jump, Dodge, Attack 등등..
보통 Actions에는 Action Maps(여기선 Player)의 기능들을 추가하게 됩니다.
그다음 Move를 클릭해서
Action Type을 Value로
Control Type은 Vector2로 바꿉니다.
Value는 키를 누를 때마다 어떤 값을 받는다는 뜻이고
Vector2는 x, y로 값을 받는 Composite가 있습니다.
나머지 Action Type과 Control Type은 다음 포스팅에서 자세히 설명하겠습니다.
Move 오른쪽에 + 버튼을 클릭해서
Add ~ Composite를 클릭해서 추가해 줍니다.
그러면 위 사진처럼 나오게 됩니다.
이제 키를 할당해야 하는데 오른쪽에 보면
요런 창이 있습니다.
여기서 Path 오른쪽 빈칸을 클릭하면
이런 식으로 나오는데 Up은 보통 W를 많이 사용하니까 W 키를 등록하면 됩니다.
키를 등록하는 방법은 3가지가 있는데
첫 번째는 Listen을 클릭해서 원하는 키를 누르면 바로 키가 등록됩니다.
두 번째는 Keyboard - By Location Of Key - W 찾아서 클릭하면 됩니다.
세 번째는 Path 오른쪽에 T 버튼이 있는데 이걸 클릭하고
<Keyboard>/w 이런 식으로 적어서 하는 방법이 있습니다.
키를 다 등록하면 이런 식으로 나오게 됩니다.
키 값 가져오기
이제 키 값을 캐릭터에다가 적용시켜야 합니다.
원하는 캐릭터에다가 Add Component - Player - Player Input을 넣어줍니다.
그다음에 아까 만든 Input Actions를 Actions에 넣어줍니다.
키 값을 가져오는 방식엔 4가지가 있는데 지금은 Send Messages 방식으로 값을 가져올 겁니다.
public class Player : MonoBehaviour
{
private Vector2 inputVec;
void Update()
{
transform.position += new Vector3(inputVec.x, 0, inputVec.y) * Time.deltaTime;
}
public void OnMove(InputValue value)
{
inputVec = value.Get<Vector2>();
Debug.Log(inputVec);
}
}
여기서 주의해야 할 점은 On + Actions 이름으로 함수를 만들어줘야 합니다.
예를 들어 아까 추가한 게 Move 이니까 위 스크립트처럼 OnMove 이런 식으로 함수를 만들어줘야 합니다.
그리고 매개변수는 InputValue를 가져와야 합니다.
이 방식이 Send Messages 방식입니다.
Move의 Control Type인 Vector2를 가져오기 위해
value.Get<Vector2>()를 써서 값을 가져옵니다.
콘솔 창에 보면 앞쪽은 (0, 1) 뒤쪽은 (0, -1) 왼쪽은 (-1, 0) 오른쪽은 (1, 0) 이 출력되는 걸 볼 수 있습니다.
이게 Action Type에서 Value를 통해 값을 가져온 겁니다.
그리고 해당 값들을 new Vector3(x, 0, y) 에 넣어 키를 누르면 캐릭터가 움직이는 걸 볼 수 있습니다.
이번 포스팅은 간단하게 캐릭터만 움직이는 방법을 알아봤고
다음 포스팅에선 Input System의 나머지 기능들을 살펴볼 예정입니다.
'유니티 > Tutorial' 카테고리의 다른 글
Unity 디자인 패턴 Singleton (0) | 2025.04.07 |
---|---|
Unity Compute Shader 01 (0) | 2025.03.22 |
Unity FSM 유한 상태 머신 (0) | 2025.01.13 |
UniTask란? (0) | 2025.01.09 |