이전 구현 구조
- 뛰기 : WASD 입력시 움직임 ( 기본 속도 = 걷기 ) -> Shift 누를 시 SetState(Running) 호출 -> StateComponent에서 State를 Running으로 바꾸고 델리게이트 실행 -> 델리게이트에 바인딩 되어 있는 SetRunningMode 함수에서 MaxWalkSpeed 600으로 변경
- 걷기 : Shift를 땔 시 SetState(Walking)호출 -> StateComponent에서 State를 Walking으로 바꾸고 델리게이트 실행 -> 델리게이트에 바인딩 되어 있는 SetWalkingMode 함수에서 MaxWalkSpeed 200으로 변경
문제점
멈춰있을 땐 Idle, 걸을 땐 Walking, 뛸 때 Running 상태가 되게 하는 것을 구현하기 위해 보니 무슨 상태에서던 Shift를 눌렀다 때면 멋대로 Running, Walking이 되고 함수 호출과 델리게이트 호출의 구조가 너무 쓸 대 없이 왔다 갔다 하는 것 같았다.
물론 Shift를 눌렀을 때 현재 State를 바꾸기 전에 if문으로 체크 할 수도 있었지만 코드가 길어지고 모든 경우마다 if를 남발할 것 같아서 아예 구조를 바꾸었다.
- 정지 상태시 Idle 상태가 되도록 구현
( Move 입력이 끝나면 실행 될 MoveEnd함수 )
( MoveAction의 입력이 끝나면 실행하도록 바인딩 )
정상적으로 걷다가 멈추거나 뛰다가 멈춰도 Idle 상태가 잘 적용된다.
- Shift 입력 구조 개선 및 Walking, Running 상태 적용
Shift 를 누를 때와 땔 때 SetState가 아닌 Speed만 바꾸도록 변경
현재 속도에 따라 Walking인지 Running인지 구분 후 SetState 할 함수 구현
Move 함수에서 해당 함수 호출하여 움직일 때 State 갱신
( 내가 추가한 코드 부분이 함수 호출부분 )
Walking과 Running이 잘 적용되고, Idle상태에서 Shift를 누르고 있어도 그대로 Idle 상태이며 움직이면 바로 Running 상태가 잘 적용 되는 모습이다.
기존에 델리게이트에 바인딩 해둔 SetRunningMode와 SetWalkingMode 함수는 나중에 걷거나 뛸 때 Sound 출력이나 Effect등을 구현할 때 재사용 할 예정이다.
Jump 할 때 Jumping 상태 적용시키기
( 현재 상태가 Idle, Walking, Running 상태 일 때만 점프하도록 구현하고, Jump 상태 일 때 Move 입력 해도 상태가 Walking, Running으로 바뀌지 않도록 할 것 )
좋은 정보 감사합니다