[HollowKnight] 플레이어 조작 구현(New Input System,Action Binding)

플레이어 조작에는 Move,Attack,MovingAttack, Jump, JumpingAttack이 있다.

 

-Input System 을 패키지 매니저에서 설치해주고 재시작한다.

-잘 설치가 되었다면 Player Settings> Other Settings에서 확인할 수 있다.

Assets>Create>Input Actions로 새로운 Action을 생성한다.

새 Action Move 생성

-Player 오브젝트에 PlayerInput 컴포넌트를 추가하고 Actions에 PlayerControl 액션을 넣어준다.

 

Move

-Behavior가 SendMessages로 되어있는지 확인 후 PlayerController에 OnMove메서드를 추가한다.

 

PlayerController 작성

-Player의 상태 체크를 통해 움직임을 구현할 수 있도록 두 개의 메서드를 작성했다.

-CheckState 메서드는 플레이어의 상태를 변화시키는 메서드이다. 

-PlayerAction 메서드는 플레이어의 상태에 따라 움직임을 나타낸다.

이동 구현

 

Attack & MovingAttack

-기본적으로 공격은 X키를 눌렀을때 실행되며, 움직이면서도 공격을 할 수 있다.

-Move를 추가한 것처럼 attack과 movingAttack을 구현해보았다. 먼저 Attack 액션을 추가한다.

-PlayerController의 코드를 수정해준다.  Attack을 구현하는 것까지는 간단했는데, MovingAttack을 구현할 때 고민을 했다.

  OnAttack 메서드에서 움직일때만 이벤트를 호출해 멤버 변수인 isMovingAttack을 true로 바꿔 움직이는 동안 이 값이 true인 경우에 MovingAttack 상태로 변경되도록 코드를 작성했다.

주의해야할 것은 움직임을 받기 전에 isMovingAttack변수를 false로 바꿔줘야한다. 안그러면 계속 true이기 때문이다. 

Start 부분 수정
MOVINGATTACK에서 일정시간 후 MOVE상태가 된다.
Attack, MovingAttack

Jump & JumpingAttack

-Z키를 눌러 점프한다.

-Jump는 JumpUp과 JumpDown이 있다.

-Jump를 조작으로 구현할 때 나누어져야하기 때문이다.

-Jump는 키를 눌렀을 때의 누른 시간에 따라 얼마나 길게 점프할지가 정해진다.

 

Jump를 구현하기 위해 SendMessage에서 InovkeUnityEvents로 바꿔주고 이벤트도 넣어주었다.

https://velog.io/@lunetis/zero-1

 

Ace Combat Zero: 유니티로 구현하기 #1 : Input

근데 이제 새로운 입력 시스템을 곁들인...

velog.io

Invoke Unity Events로 코드를 수정해줬다.
기본 점프

 

myoskin