박민혁의 개발

유니티 게임 도중 키조작 바꾸기 본문

TIL

유니티 게임 도중 키조작 바꾸기

박민혁_kog 2023. 11. 13. 22:08

게임에서 흔히 혼란 같은 디버프에 걸릴시 키보드 상하좌우 조작이 바뀌거나

어드벤쳐 게임 같은경우 특정 상황에 따라 키조작이 바뀌는 경우가 있다

 

오늘은 input system을 이용한 키조작 변경을 알아보자

 

방법1. 액션맵 전체를 바꾸기

다음은 뉴 인풋 시스템의 플레이어의 인풋 시스템이다 

 

현재 플레이어는 w 는 up    s는 down 좌우도 마찬가지

플레이어1은 w는 down s 는 up 좌우도 반대인 상태이다

 

즉 특정 상황에 난 액션맵을 플레이어에서 플레이어1로 바꿔 상하좌우를 반대로 하고 싶은것

    playerInput = targetPlayer.GetComponent<PlayerInput>();
    if (playerInput.currentActionMap.name == "Player")
    {
        playerInput.SwitchCurrentActionMap("Player1");
    }
    else
    {
        playerInput.SwitchCurrentActionMap("Player");
    }


현재 나는 특정 상황이 여러번 - 아이템 먹기
상태이기 때문에 아이템을 1번 먹으면 플레이어1로
그아이템을 한번더 먹으면 다시 플레이어 상태 (180도의 180도 = 그대로)

어쨋든

인풋시스템.SwitchCurrentActionMap("액션맵 이름");
으로 교환 하는것

 

 

 

방법2. 특정 키만 바꾸기

1번 방법은 키입력 전체를 바꾸기에 키보드 상하좌우만 바꾸는 현재 상태에선

룩,어택,스킬,구르기,장전은 그대로 라서 무브만을 위해 바꾸는건 비효율적인 상태기에 

 

무브2를 만들고 무브를 비활성화 시키고 무브2를 활성화 시킬 생각이다

 

if (playerstatHandler.isNoramlMove)
{
    playerInput.actions.FindAction("Move2").Enable();
    playerInput.actions.FindAction("Move").Disable();
    playerstatHandler.isNoramlMove = false;
}
else
{
    playerInput.actions.FindAction("Move2").Disable();
    playerInput.actions.FindAction("Move").Enable();
    playerstatHandler.isNoramlMove = true;
}

난 무브1상태 무브2상태가 있기에 플레이어스탯핸들러에 불값을 한개 추가해

불값에 따라 상태를 바꾼다 

코드는 

인풋시스템.actions.FindAction("이름").Enable(); // 활성화

인풋시스템.actions.FindAction("이름").Disable(); // 비활성화

 

아쉽게도 인풋시스템에 미리 비활성화 시켜둘순 없는듯 하다 그렇기 플레이어 스탯 핸들러에서 

awake에 playerInput.actions.FindAction("Move2").Disable();을 해두어 시작하자마자 move1만을 활성화 시켰다.