
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 비활성화
}
}