
- 점프 시 Jumping 상태 적용
- 착지 시 현재 Move 입력에 따라 Idle, Walking, Running 상태 적용
모든 상태 전환은 Tick을 이용하지 않는 것을 목표로 한다. Tick으로 구현한다면 조건문을 많이 쓸텐데 코드가 많이 늘어날 수가 있고 조건만 한순간 맞아버리면 원하는 상태가 아니라 다른 상태로 덮어 씌워질 수 있기 때문이다. ( 개인적인 생각이다 )
점프 착지를 감지하려면 어떻게 해야할지 찾아본 결과 CharacterMovement Component의 MovementMode 관련 기능을 알게되었고 MovementModeChangedDelegate을 이용하여 구현하는 것이 베스트 인 것 같다.
- 현재 캐릭터의 상태를 바꾸는 동작 : WASD 이동 입력, Shift 걷기 뛰기 입력, SpaceBar 점프 입력
점프 ( falling )시 상태는 Jumping이 되어야 하며 Jump상태 일 때는 wasd , shift 입력에 의해 상태가 바뀌어서는 안된다. 아예 wasd, shift 입력 했을 때 Jumping 상태이면 입력을 무시하는 방법도 있지만 입력 자체를 막아버리는건 아닌 것 같다. 그러므로 wasd, shift 입력 했을 때 상태를 체크하고 바꿔주는 함수에서 Jumping 상태 일 때를 체크하면 될 것이다.
- 캐릭터의 움직임 관련 입력마다 조건을 체크하여 상태를 변환시켜줄 함수
( WASD, Shift, SpaceBar 입력 할 때 마다 조건을 검사하여 상태를 적용시켜줄 함수이다. 기존에 속도만 검사해서 Walking, Running만 적용시키던 것에 Jumping, Idle검사를 추가하였다. OnMoveState -> OnMoveStateChanged 로 이름 변경 )
- MovementModeChangedDelegate에 바인딩 시켜줄 함수 구현
( MOVE_Walking의 경우 바닥에 서 있을 때 이고 MOVE_Falling의 경우 공중에 떠 있을 때 실행된다. )
- MovementModeChangedDelegate에 만든 함수 바인딩
( MovementModeChangedDelegate는 CharacterMovement에 있다. 함수 인자는 ACharacter, EMovementMode, uint8 이다. )
- 조건 체크 함수를 입력 관련한 곳들에 추가하기
( 단순 WASD 입력 시 MOVE_Walking 상태에서 변하지 않기 때문에 입력 할 때마다 체크 필요 )
( WASD 입력을 끝냈을 때도 MOVE_Walking 상태에서 변하지 않기 때문에 체크 필요 )
Idle <-> Walking <-> Running 상태 변환 정상 작동
Idle <-> Jumping
Walking <-> Jumping
Running <-> Jumping 상태 변환 정상 작동
자연스러운 떨어짐에도 Jumping 상태 정상 적용
Jumping 상태에서 Shift눌러도 Jumping 상태 유지 ( 속도는 바뀌는데 고칠지 냅둘지 고민중이다. 게임마다 다르기 때문 )
Status Component를 만들기
WalkSpeed와 RunSpeed 이식할것
Status DataTable도 만들기
Status Component에서 기본적으로 초기 스탯만 관리할지 모든 스탯과 스탯의 변화와 추가도 관리할지 고민