73.내일배움캠프 65일차 TIL <Unity Unity 2D 팀프로젝트- MartialGod:Reborn - 14일차> 07/10

정광훈(Unity_9기)·2025년 7월 10일

TIL (Today I Learned)

목록 보기
74/110
post-thumbnail

PlayerInput

Velog에서 이거 관련 쓴 글 있었던 것 같아서 찾을라 했는데 못찾아서 다시 씀.

이 메서드는 Unity의 새로운 입력 시스템에서 특정 입력
(키 누름, 버튼 클릭, 스틱 움직임 등)이 발생했을 때 호출되는 함수.
context라는 변수는 이 입력에 대한 자세한 정보를 담고 있음.

context.started:
의미: 입력이 시작된 순간.
키를 누르거나 스틱을 움직이기 시작하는 바로 그 시점.

언제 사용? 어떤 동작의 시작점을 감지할 때 (예: 공격 준비 애니메이션 시작, 달리기 시작).

context.performed:
의미: 입력이 성공적으로 수행된 순간.
대부분의 게임 로직을 여기에 넣음.

언제 사용? 실제로 어떤 동작을 실행할 때 (예: 공격 발동, 점프, UI 메뉴 선택).

context.canceled:
의미: 입력이 취소된 순간.
키를 떼거나 스틱을 원래 위치로 되돌릴 때 발생.

언제 사용? 어떤 동작의 종료점을 감지할 때 (예: 공격 중단, 조준 해제).

public void MyAction(InputAction.CallbackContext context)
{
    if (context.started)
    {
        Debug.Log("액션이 시작되었습니다!"); // 키를 누르는 순간
    }

    if (context.performed)
    {
        Debug.Log("액션이 수행되었습니다!"); // 키를 눌러서 액션이 완료된 순간 (가장 많이 사용)
        // 여기에 실제 게임 로직 (공격, 점프, UI 이동 등) 구현
    }

    if (context.canceled)
    {
        Debug.Log("액션이 취소되었습니다!"); // 키를 떼는 순간
    }
}

<오늘 구현한 코드>

그래서 이런 식으로 구현했다.

   public void UIMove(InputAction.CallbackContext context) // W,S키로 UI를 위아래로 메뉴를 선택할 수 있다.
    {
        if (isMenuInputDisabled) return;

        if (context.performed)
        {
            Vector2 move = context.ReadValue<Vector2>(); // wasd조작

            if (move.y > 0.1f) // W - 위로 이동
            {
                currentIndex--;
                if (currentIndex < 0) // 첫 인덱스에서 위로 이동하면 마지막 인덱스로 이동
                {
                    currentIndex = selectMenuList.Count - 1;
                }

                UpdateSelectFont();
            }
            else if (move.y < -0.1f) // S - 아래 이동
            {
                currentIndex++;
                if (currentIndex >= selectMenuList.Count) // 마지막 인덱스에서 아래로 이동하면 첫 인덱스로 이동
                {
                    currentIndex = 0;
                }

                UpdateSelectFont();
            }
        }
    }

    public void UIEnter(InputAction.CallbackContext context) // Enter키 누르면 해당 메뉴 선택
    {
        if (isMenuInputDisabled) return;

        if (context.performed)
        {
            EnterMenu(currentIndex); // 해당 메뉴 기능 실행
        }
    }

    public void UIEscape(InputAction.CallbackContext context) // ESC키 누르면 세이브 노드UI 나가기
    {
        if (isMenuInputDisabled) return;

        if (context.performed)
        {
            UIManager.Instance.Close<SaveNodeUI>(); // 세이브노드UI 비활성화
        }
    }

0개의 댓글