실습 내용 중 Input System 사용 방법을 비교하는 내용이 있었다.
Input Action Asset을 Player Input에 할당하여 입력을 받는 방식의 차이점을 비교해보았다.
지금까지 강의에서 다룬 내용은 Send Messages 방식과 Invoke Unity Events 방식이다.
물론 특강에서 다룬 방법도 포함하면 레거시 방식처럼 사용하는 Direct 방식과 Invoke C Sharp Events도 있지만 오늘 비교한 두 내용만 정리했다.
차이점을 생각해보다가 결합도에서 차이가 있나 싶어서 송지원 튜터님께 여쭤보았고
가장 큰 차이점에 대해 설명을 들었다.
Player Input 컴포넌트가 있는 게임오브젝트의 모든 컴포넌트에게 메시지를 보낸다.
// vector2
public void OnMove(InputValue value)
{
Debug.Log(value.Get<Vector2>());
// Debug.Log(value.isPressed);
}
// button
public void OnJump(InputValue value)
{
Debug.Log(value.isPressed);
}
Player Input을 Unity Event를 사용하듯 원하는 메서드를 넣어 호출할 수 잇다.
Player Input 컴포넌트에 아래 그림과 같이 Unity Event 항목이 생긴다.
이 항목에 버튼 OnClick 이벤트를 할당하듯이 원하는 컴포넌트를 넣고 메서드를 선택하면 된다.
public void OnMove(InputAction.CallbackContext context)
{
if(context.phase == InputActionPhase.Started)
{
Debug.Log("Move Started");
}
else if(context.phase == InputActionPhase.Performed)
{
Debug.Log(context.ReadValue<Vector2>());
}
else if(context.phase == InputActionPhase.Canceled)
{
Debug.Log("Move Canceled");
}
}
phase : 입력의 시점, 입력 상태를 받아올 수 있다.
상태에 대한 정리는 다음과 같다.
상태 이름 | 설명 | 값 |
---|---|---|
Disabled | 액션이 활성화되지 않은 상태 | 0 |
Waiting | 액션이 활성화되어 있고 관련된 인풋을 받도록 기다리는 상태 | 1 |
Started | 연동한 컨트롤러가 이제 막 액션을 시작하는 상태, 액션이 시작할 때 | 2 |
Performed | 액션이 진행 중인 상태, 누르고 있는 중 | 3 |
Canceled | 액션이 끝난 상태, 손을 뗀 상태 | 4 |
ReadValue : 입력값을 받아올 수 있다.
ReadValue<T> : 입력값을 받는 메서드로 원하는 자료형을 제너릭란이 입력하여 받을 수 있다.
단, Input Action Asset에서 설정한 입력 방식이 지원하는 자료형인 경우에 한정된다.
Broadcast Message < Send Message < Invoke Unity Event <= Invoke C# Event
성능 측면에서 추천하는 것은 당연히
Invoke Unity Event, Invoke C# Event 두 방식이다.
오늘 스탠다드 특강으로 디자인 패턴 특강도 진행되었고 내용을 정리했다.
추후 녹화본이 올라오면 다시 복습하며 정리해볼 것이다.
#내일배움캠프 #스파르타내일배움캠프 #스파르타내일배움캠프TIL