231013_ InputAction

Minsang Kim·2023년 10월 13일
0

TIL

목록 보기
38/41

유니티에서 사용자의 입력을 받는 방식으로는 지금까지 2개를 써봤다.
먼저, Input.GetKeyDown()
Update문에 넣어주면서 인풋의 입력을 확인하기 때문에 뭔가 비효율적인 느낌이 들었다.
그리고

InputAction

내배캠을 들으며 알게된 기능 중에 하나다.
별도의 에셋으로 임포트해서 사용하는 기능으로, 입력을 받는다.
그치만 InputAction도 여러가지 사용방법이 있다. 오늘은 3가지 배운 내용을 얘기해보자.

1. InputAction 컴포넌트 - Send Message

2. InputAction 컴포넌트 - Invoke Unity Events

3. InputAction Generate C# class


InputAction을 만들어주고 나면 이런 식으로 Generate C# Class 체크박스가 있었다. (지금까지는 이거 있는지도 몰랐다.)
체크해주고 Apply 해주면 같은 이름의 C# 스크립트가 생긴다. 스크립트를 대충 보면 클래스와 클래스 내부의 (액션맵이름?+Actions) 부분으로 나뉘는 것 같다. 내부 액션 클래스에 OnMovement, OnLook, OnJump 같은 메소드들이 자동 구현되어 있다.

그럼 사용하는 방법에 대해 ARABOZA.
먼저 Enable과 Disable을 해줘야 하는 듯하다.

public class PlayerInput : MonoBehaviour
{
    public PlayerInputAction InputAction { get; private set; }

    public PlayerInputAction.PlayerActions PlayerActions { get; private set; }

    private void Awake()
    {
        InputAction = new PlayerInputAction();

        PlayerActions = InputAction.Player;
    }

    private void OnEnable()
    {
        InputAction.Enable();
    }

    private void OnDisable()
    {
        InputAction.Disable();
    }
}

이런식으로 PlayerInput 스크립트를 따로 작성한 후, 생성된 PlayerInputAction 클래스를 선언해 사용하는 모습이다.
그리고 이 스크립트가 비활성화 되었을 때 InputAction도 비활성화해주면서 입력을 받지않는 것을 볼 수 있다.

Player.PlayerInput.PlayerActions.Movement.canceled += OnMovementCanceled;
Player.PlayerInput.PlayerActions.Run.started += OnRunStarted;

이는 다른 스크립트에서 액션을 추가하는 방식이다.
추가는 +=, 제거는 -=.

MovementInput = Player.Input.PlayerActions.Movement.ReadValue<Vector2>();

여기는 입력을 받아오는 방법.


요런식으로 InputAction을 다양하게 사용해보자

profile
게임만 하다가 개발자로

0개의 댓글