레거시 Input과 유사한 방법
using UnityEngine.InputSystem;
Keyboard keyboard;
Mouse mouse;
Gamepad gamepad;
void Start()
{
keyboard = Keyboard.current;
mouse = Mouse.current;
gamepad = GamePad.current;
}
void Update()
{
if(keyboard.aKey.isPressed)
{
~
}
else if(keyboard.dKey.isPressed)
{
~
}
//
}
keyboard.aKey.wasPressedThisFrame : 누른 첫 순간만 true
keyboard.aKey.isPressed : 누르는 동안 전부 true
keyboard.aKey.wasReleasedThisFrame : 눌렀다가 뗀 순간 true
mouse.leftButton.isPressed : 좌클릭
mouse.rightButton.isPressed : 우클릭
mouse.scroll.ReadValue : 스크롤 입력
// 필드에 선언
public InputAction moveAction;
InputAction을 위의 코드처럼 선언하면 인스펙터에서 직접 바인딩할 수 있다.
void Start()
{
moveAction.performed += TestInput;
}
void TestInput(InputAction.CallbackContext value)
{
//~~
}
코드에서 접근해보면 다음 3개의 이벤트(번개 아이콘)를 볼 수 있다.
using UnityEngine.InputSystem;
public float dir;
public InputAction moveAction;
public InputAction jumpAction;
public event UnityAction OnJumpEvent;
// 오브젝트가 켜졌을 때 구독하고
// 꺼졌다면 구독해제해 주는 것이 프로그래밍 관점에서 완성된 동작
void OnEnable()
{
// 이벤트 방식
// 구독
moveAction.performed += PlayerMove;
moveAction.canceled += PlayerStop;
jumpAction.started += PlayerJump;
// 사용 시작
moveAction.Enable();
jumpAction.Enable();
}
void OnDisable()
{
// 사용 종료
moveAction.Disable();
jumpAction.Disable();
// 구독 해제
moveAction.performed -= PlayerMove;
moveAction.canceled -= PlayerStop;
jumpAction.started -= PlayerJump;
}
void PlayerMove(InputAction.CallbackContext value)
{
dir = value.ReadValue<float>();
}
void PlayerStop(InputAction.CallbackContext value)
{
dir = 0;
}
void PlayerJump(InputAction.CallbackContext value)
{
OnJumpEvent?.Invoke();
}
using UnityEngine.InputSystem;
public float dir;
public UnityAction jumpAction;
public InputActionAsset actionAsset;
InputActionMap basic;
InputAction moveAction;
InputAction jumpAction;
// 오브젝트가 켜졌을 때 구독하고
// 꺼졌다면 구독해제해 주는 것이 프로그래밍 관점에서 완성된 동작
void OnEnable()
{
basic = actionAsset.FindActionMap("basic");
moveAction = basic.FindAction("Move");
jumpAction = basic.FindAction("Jump");
//이벤트 할당
// enable
moveAction.performed += PlayerMove;
moveAction.canceled += PlayerStop;
basic.Enable(); // 전체 켜기
// 또는
moveAction.Enable(); // 부분 켜기
jumpAction.Enable();
}
void OnDisable()
{
// 사용 종료
moveAction.Disable();
// 구독 해제
moveAction.performed -= PlayerMove;
moveAction.canceled -= PlayerStop;
}
void PlayerMove(InputAction.CallbackContext value)
{
dir = value.ReadValue<float>();
}
void PlayerStop(InputAction.CallbackContext value)
{
dir = 0;
}