게임은 특정 플랫폼 하나만을 겨냥하고 개발하는 경우는 거의 없다. 스케일이 커지게 되면 PC 말고도 모바일, 콘솔 등의 플랫폼도 지원을 해야 할텐데, 그 중에서도, 기존 Unity Input System은 게임 플랫폼 환경 서비스를 추가할 때 골머리를 앓게하는 요소라고 한다. PC에서는 키보드와 마우스, 모바일은 화면 터치, 콘솔에서는 조이스틱을 이용하는 등 플랫폼마다 사용하는 입력 방식이 다르기 때문이다.
즉, 다음과 같이 코드를 짜게 되면 플랫폼 추가 확장할 때 게임 Input System을 수정해야 하는 번거로움이 생긴다.
if(Input.GetKey(KeyCode.UpArrow)) // PC에서 다른 플랫폼으로 변경할 때, 번거로움이 생긴다.
{
...
}
그래서 Unity에서는 2019버전부터 New Input System이란 것을 만들었다.
New Input System이란?
- 다양한 플랫폼에서 빠르게 컨트롤 설정 가능
- 즉, 하나의 코드를 통해 다양한 플랫폼의 입력 환경을 지원할 수 있는 것이 특징
- Package Manger에서 Input System을 설치하여 적용이 가능
New Input System 사용하기
1. Package Manager에서 Input System 설치하기
Package Manger에서 Unity Registry로 변경 후, Input System을 검색하여 다운로드를 받을 수 있다.
설치를 다 했다면, 다음과 같이 경고창(Warning)이 뜬다.
"기존 Input System 대신 새로 받은 Input System을 활성화할 것이냐" 는 내용이므로 Yes를 눌러주면 된다.
그러면 Unity를 다시 로드할 것이다.
다 되고 나서, Project 창에서 생성을 할 때 Input Actions 항목이 있다면 제대로 설치가 된 것이다.
2. 설치한 새로운 Input System이 Unity Editor에 적용되었는지 확인하기
- Unity Editor 상단 메뉴바 Edit → Project Settings → Player 탭
Active Input Handling*이 Input System Package(New)로 설정되어 있는지 확인한다.
보통 자동으로 설정되어 있을 것이긴 하다.
만약 기존 예전 Input System을 사용하고 싶다면 Input Manager (Old),
기존과 새로운 Input System 둘 다 사용하고 싶다면 Both를 선택해도 된다.
3. Input Actions 에셋 생성 및 셋팅하기
Project 창에서 Create → Input Actions 를 클릭해 생성해준다.
Player 캐릭터에게 적용할 것이므로 "PlayerActions"라고 이름을 정해줬다.
어떤 키 입력을 하면, 어떤 기능을 수행하라 등의 이런 내용들이 이 Input Actions 파일 안에 다 들어간다.
해당 파일을 더블 클릭하면 다음과 같은 창이 뜬다.
현재 Control Schema가 없는 상태다. Control Schema란 어떤 플랫폼에서 특정 내용들을 사용하겠다는 것을 설정.
PC 플랫폼을 겨냥하여 사용할 것인지, 모바일인지 등 따로따로 플랫폼을 미리 설정할 수 있는 게 Control Schema
설명하기 어려우니, 어떻게 하는지 먼저 눈으로 보자.
먼저 PC 플랫폼에서 사용할 스키마를 만들어본다.
Control Schema 추가하기
PC 플랫폼에서 사용할 것이므로 스키마 이름을 "PC"로 해줬다.
Unity에서 입력받아 처리할 수 있는 모든 컨트롤러들이 나타나 있다.
PC 플랫폼에서 사용할 것이므로, 마우스(Mouse)와 키보드(Keyboard)를 선택했다.
해당 플랫폼에서 사용할 장치를 추가해주고, Save
본 글에서 다루진 않지만, 타겟 플랫폼 설정 예시를 들기 위해 'MOBILE' 껍데기만 추가해줬다.
물론 아직 내용물을 넣지 않고, 껍데기 형태만 설정해놨지만
나중에 빌드할 때, 타겟 플랫폼에 맞게 선택해서 빌드해주면 배포용 완성이다.
PC 플랫폼이 타겟이라면, PC를 선택하고 빌드 진행
기존 Input System이었다면 코드라던지 수정해야할 게 많아서 골치 아프지만, New Input System에선 이 부분만 바꿔서 빌드해주면 끝이다. 이제 내부 설정을 할 차례다.
4. Action Maps, Actions, Properties 설정하기
Action Maps란? 캐릭터나 몬스터, 아니면 다른 곳에 사용할 키를 Map의 이름으로 지정하는 걸 말한다.
본인은 PC 플랫폼에서 주인공 캐릭터에 사용할 키 맵을 지정하기 위해, "PlayerActions"란 이름으로 하나 생성했다.
주인공 캐릭터에 사용할 키 Map 이름을 설정
이렇게 Map을 하나 생성하면, 내부적으로 설정할 수 있는 게 생긴다.
Actions는 해당 캐릭터의 어떤 액션에 사용될 키 입력을 받을 것인지에 대한 형태를 설정한다.
주인공 캐릭터의 액션 중 "이동(Move)"에 관한 내용으로 생성해봤다.
이동(Move) 액션
하위에 있는 No Binding은 일단 지워준다.
보통 캐릭터는 WASD나 ↑←→↓ 키를 통해 이동 입력을 받는다. 방향까지 내포되어 있기 때문에 Value로 받았다.
Action Type을 "Value"로 선택
캐릭터 이동엔 X, Y 값만 있으면 된다. "Vector2" 선택
Action Type은 어떤 것을 기준으로 키 입력이 됐는지 안 됐는지를 정하는 옵션이다.
- Value : 입력 들어온 값에 따라 결정 (ex. '+' 값이 들어오면 오른쪽, '-'값이 들어오면 왼쪽 이런 식)
- Button : 버튼이 눌렸는지, 안 눌렸는지에 따라 입력 여부 결정 (ex. 점프 같은 경우)
Control Type은 해당 키가 눌렸을 때, 스크립트에서 어떤 자료형 타입으로 리턴받아 사용할 지 정하는 옵션이다.
X를 좌우로, Y를 Z 값에 사용하여 전진 후진으로 사용할 것이므로 Vector2를 선택해줬다.
캐릭터 이동에 WASD 또는 ↑←→↓를 사용할 것이기 때문에 키 바인딩을 4개 해야 한다.
Add Up\Down\Left\Right Composite 선택
그러면 위와 같이 이름이 바뀌면서 자동으로 설정된다.
<No Biding>은 해당 키에 대응되는 키를 설정해주지 않았다는 뜻이다. 설정해주자.
먼저 WASD에 사용될 키부터 바인딩을 해주자. 이름을 "WASD"로 바꾸고, Up 키에 사용될 'W' 키를 적용해줬다.
'W'를 검색하여 'W' 키 클릭
잘 바인딩 된 모습. 이제 W키를 누르면 캐릭터 윗 쪽 입력을 받는다는 의미
나머지 S, A, D 키도 똑같이 적용해주면 된다.
방향키 입력에 대해서도 캐릭터 이동 입력을 받을 것이므로 똑같이 하나 더 생성해서 만들어줬다.
키보드 방향키에 대한 키 바인딩
키 바인딩까지 모두 끝났다. 위에 있는 Auto-Save를 누르고 닫아준다.
5. 적용할 게임 오브젝트에 Player Input 컴포넌트 붙이기
적용할 캐릭터의 Inspector 창에서 Add Component → "Player Input" 컴포넌트를 부착해줬다.
"Player Input" 컴포넌트 부착
그러면 해당 게임 오브젝트에 다음과 같은 문양이 생긴다.
그리고 Player Input 컴포넌트의 Actions에 아까 만든 "PlayerActions" 파일을 넣어준다.
Actions 필드에 넣어주기
Default Schema는 나중에 빌드할 때, 타겟 플랫폼에 맞게 다음과 같이 설정 해주면 된다.
구동될 환경에 따라 플랫폼 선택. 본 글에서 MOBILE은 설정 따로 안 했으므로 우선 PC 선택
물론 Any로 설정하면 알아서 설정되긴 한다.
Default Map은 현재 Player Input 컴포넌트가 부착된 오브젝트가 "주인공 캐릭터"이므로, 아까 생성했던 "PlayerActions" Map을 선택해주면 된다.
그 외에도 예를 들어, 펫(Pet)을 조종하고 싶다면, "PetActions" Map을 생성해줘서 키 바인딩을 해주고, 펫 오브젝트에 부착하여 설정해주면 될 것이다.
해당 게임 오브젝트가 입력받을 Action Maps를 선택
이로써, 키 입력 셋팅은 다 끝이 났다.
https://daekyoulibrary.tistory.com/entry/Unity-New-Input-System-1
'게임엔진 > Unity' 카테고리의 다른 글
[Unity] 애니메이션 블랜드 사용하기 (0) | 2023.07.31 |
---|---|
[Unity] New Input System 키 입력을 스크립트에 전달하여 처리하기 (0) | 2023.07.25 |
[Unity] Input Action을 사용해야 하는 이유 (0) | 2023.07.24 |
[Unity] Input Manager (키보드 입력, 마우스 클릭, 조이스틱 등) (0) | 2023.07.24 |
[Unity] 애니메이션 내 추가 버튼이 비활성화인 이유 (0) | 2023.07.21 |