[HollowKnight] Player 점프 추가 구현(New InputSystem- interactions 의 hold, press)

-기존 점프는 단순히 press하면 같은 높이로 점프하는 것이었다. 그러나 할로우나이트에서 플레이어의 점프는 단순히 press했을때 똑같이 점프하지 않는다. => 점프 키를 눌렀을 때 누른 시간에 비례해서 점프하는 높이가 달라진다.

 

-이를 어떻게 구현하면 좋을지 찾아보았는데, 대부분 New Input System이 아니라 구현 방법이 달라질 수 밖에 없었다.

=> 대부분 GetKeyDown, Up을 통해 시간을 측정하는 방법이었다.

 

-이 포스팅에서는 New Input System을 통해 Press와 Hold시간을 구분해 구현해 보려한다.

 

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Interactions.html

 

Interactions | Input System | 1.0.2

Interactions An Interaction represents a specific input pattern. For example, a hold is an Interaction that requires a Control to be held for at least a minimum amount of time. Interactions drive responses on Actions. You can place them on individual Bindi

docs.unity3d.com

-New Input System에는 "Interaction"이 있다. 바인딩에서 interactions에 Hold와 Press를 추가해보았다.

-이 interaction의 역할은 해당 키 입력에 대해 어떤 방식으로 처리할 것인지 설정해줄 수 있는 옵션이다.

- interaction은 추가한 순서대로 우선권을 가진다

-위의 이미지와 같이 추가하면 Hold -> Press 순으로 우선권을 가진다. Hold가 먼저 추가되었고, 그 다음에 Press가 추가되었기 때문이다.

-상위의 상호작용이 성공한다면 그 다음인 상호작용은 실행되지 않는다.

-press는 눌렀을때 이벤트 발생, release는 뗐을 때 이벤트 발생

-press의 behavior를 releaseOnly로 바꿔주었다.

using UnityEngine.InputSystem.Interactions;

를 추가하고 코드를 수정해보았다.

HoldInteraction일

때에는 홀딩 시간을 측정하고 키에서 손을 뗀 순간 홀딩 시간에 따라 점프하도록 코드를 작성했다.

-아주 짧게 눌렀을 때와 아주 길게 눌렀을 때 최저/최대 점프 높이를 조정하기 위해 기본값을 넣어주었다.

 

구현 결과

 

myoskin