Unity 3일차 학습

규수·2026년 3월 18일

개발 공부 일지

목록 보기
15/44

오늘은 플레이어가 동작하는 다양한 키 동작을 게임에 전달하는 입력 시스템에 대해 정리해보겠습니다.

1) InputAction

InputAction은 어떤 장치(키보드, 마우스, 패드 등)에서 입력이 들어오든 이를 하나의 액션으로 관리하는 단위입니다. (ex. jump, 플레이어 이동)

기존의 Legacy Input 방식인 Input.GetKey는 특정 키(예: Space)가 눌렸는지를 코드에서 직접 확인하는 하드코딩 방식이었습니다.
반면 InputAction은 액션 맵을 통해 키를 설정하고, 코드에서는 키의 이름이 아닌 액션의 이름을 참조합니다. 이로 인해 키 매핑 변경이나 다양한 플랫폼 대응이 훨씬 자유로워졌습니다.

InputAction을 사용하기 위해서는 반드시 Enable() 함수를 호출하여 활성화해야 합니다. 활성화되지 않은 액션은 어떤 입력이 들어와도 반응하지 않습니다.

<style>
using UnityEngine;
using UnityEngine.InputSystem; // 입력 시스템

public class PlayerInputHandler : MonoBehaviour
{
    // 인스펙터나 코드를 통해 설정된 액션
    public InputAction jumpAction;

    private void OnEnable()
    {
        // 액션을 사용하기 위해 반드시 활성화
        jumpAction.Enable();
    }

    private void OnDisable()
    {
        // 객체가 비활성화될 때 액션도 함께 비활성화
        jumpAction.Disable();
    }
}
</style>

2) 입력 시점

버튼 입력은 그 시점에 따라 세 가지 상태로 나뉘며 이를 정확히 구분해서 사용해야 의도한 게임 로직을 구현할 수 있습니다. 입력 시점은 다음과 같습니다.

  1. WasPressedThisFrame
  • 개념: 버튼을 누르는 순간, 딱 한 프레임만 참(True)이 됩니다.
  • 사용 시기: 단발성 액션인 점프, 공격, 메뉴 열기 등에 사용합니다.
  • 이미지 기준: 버튼이 눌리기 시작하는 하강 에지(Down) 시점입니다.
  1. IsPressed
  • 개념: 버튼을 누르고 있는 동안 매 프레임 참(True)이 유지됩니다.
  • 사용 시기: 연속적인 움직임인 캐릭터 이동, 기 모으기, 자동 발사 등에 사용합니다.
  • 이미지 기준: 버튼이 눌려 있는 상태(Hold) 구간입니다.
  1. WasReleasedThisFrame
  • 개념: 누르고 있던 버튼에서 손을 떼는 순간, 딱 한 프레임만 참(True)이 됩니다.
  • 사용 시기: 게이지 충전 후 발사, 투척 무기 던지기, 점프 높이 조절 등에 사용합니다.
  • 이미지 기준: 버튼에서 손을 떼는 상승 에지(Up) 시점입니다.
<style>
using UnityEngine;
using UnityEngine.InputSystem;

public class InputStateTest : MonoBehaviour
{
    public InputAction fireAction;

    private void OnEnable() => fireAction.Enable();

    void Update()
    {
        // 1. 누르는 순간 (단발성)
        if (fireAction.WasPressedThisFrame())
        {
            Debug.Log("사격 개시!");
        }

        // 2. 누르고 있는 중 (지속성)
        if (fireAction.IsPressed())
        {
            Debug.Log("에너지를 모으는 중...");
        }

        // 3. 떼는 순간 (종료 혹은 발사)
        if (fireAction.WasReleasedThisFrame())
        {
            Debug.Log("강력한 공격 발사!");
        }
    }
}
</style>

코드상에서 정의한 후, 아래와 같이 Unity Inspector 영역에서 실제 입력하는 Key와 Binding할 수 있습니다.

오늘은 유니티의 새로운 입력 방식인 InputAction에 대하여 학습하였습니다.
기존의 Input.GetKey방식보다 복잡하다는 생각을 하였지만 Enable()을 통한 제어와 액션 단위의 관리가 훨씬 안정적인 구조를 제공한다는 점을 알게되었습니다.

0개의 댓글