1. New Input System
2. New Input System 사용방법
3. PlayerController  스크립트
4. PlayerInput 컴포넌트

📝 New Input System이란?                                                                          

Unity에서 2019 버전부터 새로 만든 Input 시스템

 

🔖 기존 Input System과 다른 점

기존의 Input시스템에는 Axes를 추가하고, 스크립트를 작성할 때 Update에서 계속 GetKeyDown으로 검사해줘야 한다.

또한 플랫폼별 입력 대응이 어렵다는 한계가 있다. 

 

🔖 New Input System의 장점

1. 키보드, 컨트롤러 등의 여러 플랫폼에 쉽게 대응할 수 있다.

2. 하나의 코드를 통해 다양한 플랫폼에서의 입력 처리 가능

3. 입력 Action에 대한 함수를 직관적이고 간편하게 연결할 수 있다

 

기존 방식의 한계 

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        Jump();
    }
}

 

New Input System의 함수 연결 

void OnJump(InputAction.CallbackContext context)
{
    Jump();
}

  코드 가독성이 향상됨 

  입력 관리를 효율적으로 관리할 수 있다


📝 New Input System 사용                                                                                             

 

1. Package Manger의 InputSystem을 다운로드한다

 

 

2. Edit → Project Setting Player ActiveInputHandiling에서 사용할 Input System을 설정할 수 있다.

Input System Package(New)를 클릭하면 경고창이 뜨는데 Apply를 누른 후 유니티프로젝트를 재실행한다.

경고창 , Apply를 누른다

 

 

3. Create → Input Action을 생성한다. 이름은 PlayerInput으로 설정한다. 

 

 

4. 생성 후 Inspector 창에서 Edit Asset을 클릭한다

 

 

5. InputAction 창이 뜨면 왼쪽 상단에 Scema를 설정해 준다.

 

 

🔖 Control Scheme (컨트롤 스키마)
: 특정 플랫폼에서 사용할 입력 설정의 그룹
: 예시 
   : 키보드 + 게임패드 스키마
   : 키보드 + 마우스 스키마
: 플랫폼별 입력 대응을 할 수 있는 부분 

🔖 Action Maps (액션 맵)
: 사용할 키 입력에 대한 Action들을 그룹화

🔖 Actions (액션)
: 특정 입력에 대한 입력 동작 
: Started , Performed, Cancled등 다양한 입력상태 처리 가능 

 

 

 

6. Actions 추가 

플레이어 움직임 입력을 위한 Action을 추가한다.

Action Type은 Value / ControlType은 Vector2로 설정한다 

🔖 Action Type 
버튼 : 단일성으로 누르고 떼는 용도
Value : 지속적으로 값을 변화하고자 할 때

 

6-1. Move Action옆의 + 버튼을 누른 후 "Add Up ~ Composite"를 클릭한다

Up / Down / Left / Right에 해당하는 키를 바인딩해준다. 각각 w s a d로 바인딩해주었다. 

 

7. 다른 행동에 대한 Action을 추가해 준다

  마우스 움직임에 따른 카메라 회전 입력을 위해서 Look이라는 Action을 추가한다

             Action Type은 Value / ControlType은 Delta / Binding path는 Delta[Mouse]로 바인딩해준다 

  점프, 인벤토리, 상호작용 입력을 위한 Jump , Inventory, Interaction이라는 Action을 추가한다

             각각 Action Type은 Button / Binding path는 Backspace,  Tab , E [Keyboard]로 바인딩해준다

  공격키 입력을 위한 Attack이라는 Action을 추가한다

             Action Type은 Value / Binding path는 Left Button [Mouse]로 바인딩해준다 

 

📝PlayerController 스크립트                                                              

public class PlayerController : MonoBehaviour
{
    [Header("===Movement==")]
    private float _moveSpeed = 3f;
    private Vector2 curMoveInput;
    private void 

    FixedUpdate()
    {
        Move();
    }

    private void Move() 
    {
        Vector3 dir = transform.forward * curMoveInput.y + transform.right * curMoveInput.x;
        dir *= _moveSpeed;
        dir.y = playerRB.velocity.y;    

        playerRB.velocity = dir;
    }

    public void OnMove(InputAction.CallbackContext context) 
    {
        // 입력이 있으면 받아오기
        if (context.phase == InputActionPhase.Performed)
        {
            curMoveInput = context.ReadValue<Vector2>();
        }
        // 입력이 없으면 0,0 으로
        else if (context.phase == InputActionPhase.Canceled) 
        {
            curMoveInput = Vector2.zero;
        }
    }
}

   OnMove()

             PlayInput컴포넌트에서 입력 발생 시 리턴되는 콜백을 받아오기 위한 함수 작성

             매개변수를 InputAction.CallbackContext로 콜백을 받아온다

             현재 움직임에 대한 Vector2 타입의 curMoveInput 값을 들어온 콜백의 Vector2로 설정한다

 

   Move()

              받아온 curMoveInput을 사용하여 플레이어 움직임을 제어한다 

🔖InputActionPhase.Performed
: 콜백이 발생하는 동안 

🔖InputActionPhase.Started
: 콜백이 발생할 때, 1회

🔖InputActionPhase.Canceled
: 콜백이 종료될 때 , 1회 

 

📝 PlayerInput 컴포넌트                                                               

플레이어 오브젝트를 만든 후 PlayerController스크립트와 Player Input 컴포넌트를 추가해 준다 

Acions에 방금 만든 PlayerInput을 추가해 준다 

Behavior도 Invoke Unity Events로 설정한다

 

🔖 Invoke Unity Events
: 유저가 정의한 Action에 대한 키 입력이 들어오면 , 설정한 이벤트 (함수)가 실행된다 

 

컴포넌트의 Event → Player  Move Aciont에 (+) 버튼으로 추가해 준다

Player 오브젝트를 드래그해서 넣고, PlayerController스크립트의 OnMove메서드를 추가한다 

 

📝 결과                                                               

: wsad가 입력되면 플레이어가 움직이는 것을 확인할 수 있다. 

 


+ Recent posts