New Input System (Unite Now 2020) 정리

New Input System (Unite Now 2020) 정리

새로운 Input System을 소개하는 Unite Now 2020 유튜브 내용을 가볍게 정리한 글입니다.

New Input System이 나왔다길래 얼마나 사용하기 쉬운지 궁금해서 유튜브 영상을 보았다. 전체적으로 툴이 생기면서 깔끔해진 느낌이 들지만, 스크립트에서만 모든 인풋을 조정하려면 조금 고민이 필요해졌다. 자세한 내용은 영상을 보는 것을 추천.

영상링크: Unite Now: 새로운 Input System

사용법

설치 및 옵션설정

Window → Package Manager에서 Input System을 Install 후, Import한다.

Untitled

Edit → Project Settings → Other Settings에서

Active Input Handling 옵션을 보면 Old버전 New버전, 둘다 가능한 버전 3가지가 있다.

옵션을 알아서 설정하면 된다.

Untitled 1

새로운 인풋 만들기

Project 패널에서 Input Actions를 만들 수 있다.

Untitled 2

만들어진 Input Actions를 더블클릭하면 창이 하나 열린다.

Untitled 3

Action Maps를 하나 만들고 Move라는 액션을 하나 추가해준다.

그 후 선택해보면 액션타입과 컨트롤타입을 선택해야하는데, 캐릭터가 움직이는 것을 설정할 것이므로 Value타입, Vector2 타입으로 설정해준다.

Untitled 4

액션 옆에 + 버튼을 눌러보면 바인딩을 추가하거나 2D 벡터 컴포지트를 추가할 수 있는데, 2D벡터 컴포지터를 선택하면 상하좌우가 포함된 2D 벡터가 만들어진다.

Untitled 5

Untitled 6

Up Down Left Right를 클릭해서 바인딩을 추가해준다. WASD를 기준으로 설명하도록 하겠다.

Untitled 7

다 되었다면 Save Asset을 누른다.

Untitled 8

캐릭터에게 적용하기

플레이어 인풋을 조종하고 싶은 캐릭터에게 붙여준다.

Untitled 9

Actions에 방금 만든 것을 넣어준다.

Untitled 10

Behavior에서 Send Messages로 설정하면 내가 만든 액션의 이름대로 이벤트 함수처럼 호출할 수 있게된다.

Untitled 11

이전 코드와의 비교

플레이어 컨트롤러 스크립트에서 본래코드와 대체할 코드를 비교해보자.

// 본래 코드
if(usingOldInput)
{
	h = Input.GetAxis("Horizontal");
	v = Input.GetAxis("Vertical");
	dir = new Vector3(h, 0, v).normalized;
}
// 대체할 코드
private void OnMove(InputValue value)
{
	Vector2 inputMovement = value.Get<Vector2>();
	dir = new Vector3(inputMovement.x, 0, inputMovement.y);
}

후기

위와같이 사용했을 때의 문제점은 코드만 보았을 때 어떤 Axis를 사용하는지 명확하게 드러나지 않는다는 점 같다. 물론 맥락을 읽거나 유니티의 툴을 살펴보면 되지만, 코드만 보고서는 파악이 힘들다. 또한, 다른 유니티 프로젝트에 코드만 이식했을 때의 문제도 있다. 이를 충분히 주의하고 사용한다면 오히려 프로그래밍에 참여하지 않는 개발인력에게는 유용할 것으로 보인다.


© 2022. All rights reserved.