Input Manager
를 대체하는 시스템Input System
을 인스톨하여 사용할 수 있음Action Maps
에 입력값을 받을 대상을 지정Actions
에 지정한 대상이 실시할 액션을 추가Properties
에 액션을 실행시킬 입력값을 할당Value
: 기본값, 컨트롤 상태에 대한 지속적인 변경을 추적해야 하는 모든 입력에 사용Button
: 누를 때마다 한 번씩 동작을 트리거하는 입력에 사용Pass Through
: 바인딩된 컨트롤을 변경하면 해당 컨트롤 값으로 콜백이 트리거됨, 액션 집합의 모든 입력을 처리하려는 경우 유용Send Message
: 키가 입력되면 해당 오브젝트의 모든 컴포넌트에 메시지 함수를 보냄BroadCast Message
: Send Message
와 동일하지만 자식 컴포넌트들에게도 메시지가 보내짐Invoke Unity Event
: 유니티의 Event System
과 동일한 방식으로 객체 내 함수를 해당 입력 이벤트에 바인딩함.Invoke C Sharp Events
: Input Actions
에서 설정한 키들을 바탕으로 유니티가 C# 코드를 작성해줌. Save Asset시 코드도 자동으로 업데이트됨Actions Maps
를 활성화시킴Actions
에 입력된 각각의 키 바인딩에 맞춰 실행할 함수들을 추가해줌Waiting
: 키 입력 대기시Started
: 키 입력이 시작되어 값은 받았지만 실행이 완료되지 않았을 시performed
: 키 입력받고 실행이 완료되었을 때canceled
: 키 입력 해제시PlayerInput.SwitchCurrentActionMap(string actionName)
함수로 변경PerformInteractiveRebinding()
함수를 사용하여 변경 가능On-Screen Stick
컴포넌트도 설치됨액션의 중복 할당, 오남용 등을 방지하기 위해서 다음과 같은 작업을 해 준다.
Enable
, Disable
될 때 바인딩 연결 및 해제와 액션의 활성화 여부를 변경한다.private void OnEnable()
{
inputAction_track1.started += CallbackTrack1;
inputAction_track1.Enable();
}
private void OnDisable()
{
inputAction_track1.started -= CallbackTrack1;
inputAction_track1.Disable();
}
private void CallbackTrack1(InputAction.CallbackContext context)
{
if(context.action.phase == InputActionPhase.Started)
{
Attack();
}
}
인풋 시스템의 프로퍼티 설정에서 액션 타입은 Value
, Button
, Pass Through
의 총 세가지 종류가 있다.
인풋 시스템은 이벤트 기반이다.
즉 특정 입력이 들어오면 인풋 시스템이 이에 해당하는 이벤트들을 발생시키는 구조이다.
개발자는 해당 입력 이벤트에 원하는 함수들을 구독시켜놓음으로써 입력을 할당한다.
인풋 시스템에서 할당하는 모든 액션은 인터랙션
을 갖고 있다.
인터랙션은 단순하게 게임 내에서 상호작용하는 방식을 뜻한다.
개발자는 여러 종류의 인터랙션을 액션 매핑 도중 추가할 수 있다.
모든 액션은 기본적인 인터랙션을 갖고 있다. 이 인터랙션은 구 입력 시스템의 Press
와 유사하다.
Started
: 입력값이 들어와 인터랙션이 시작되는 때Performed
: 인터랙션이 완료되었을 때(키를 충분히 오래 눌러 Hold인터랙션이 완료되었을 때 등)Canceled
: 인터랙션이 취소되었을 때(키를 누르던 중간에 떼어 Hold 인터랙션이 완료되지 않았을 때 등)인터랙션에 대한 시간표는 다음과 같다
개발자는 입력에서 다양한 값들을 받아올 수 있다.
값을 받아올 때 인풋 시스템은 명확화(disambiguation)을 실시한다.
인풋 시스템의 명확화란 어떤 것이 주 조작(main control)인지 결정하는 과정을 뜻한다.
이는 한 번에 하나의 입력을 기대할 때 매우 유용한 과정이다.
명확화는 따른 값 변화에 따른 인터랙션을 확인하면 이해하기 쉽다.
Start
인터랙션은 액션에 대한 값이 기본값과 달라지면 실행된다.Peformed
인터랙션은 액션에 대한 값이 변화될 때마다 실행된다.Start
와 Performed
가 동시에 실행되게 된다.Canceled
인터랙션은 액션에 대한 값이 다시 기본값으로 돌아갈 때 실행된다.명확화로 인해 Value
와 Passthrough
의 차이점이 갈린다.
Passthrough
는 모든 입력값을 가져오지만, Value
는 명확화와 초기 상태 체크를 수행하여 걸러진 입력값을 가져온다.
Value
의 초기 상태 체크는 입력 액션 활성화 시에 실시하는 상태 체크를 말한다.
만약 액션이 Enable()
로 활성화되었을 때 컨트롤러가 디폴트 값이 아닌 값(버튼이 이미 눌려져 있는 상태)을 갖고 있으면, 인풋 시스템은 이에 해당하는 이벤트를 전송해준다.
반면 Passthrough
는 활성화되었을 때의 값이 디폴트 값이 아니더라도 이벤트가 전송되지 않는다.
버튼은 입력 시 값 전달 없이 액션을 트리거시키는 종류이다. 초기 상태 체크 또한 하지 않는다.
인터랙션을 이용해 이벤트의 전송 시점을 변화시킬 수 있다.
예를 들어 Press
인터랙션을 추가하여 한계점을 등록하면, 버튼이 눌리기 시작했을 때 Start
가 호출되고, 버튼이 한계점 이상으로 눌렸을 때 Performed
가 호출된다.
명확화를 하지 않아 주 입력이 없이 모든 입력을 직접적으로 받아온다.
인터랙션에서 설정해주지 않는 한 Start
와 Canceled
이벤트를 전송하지 않는다.
초기 상태 체크를 하지 않는다.