
왼쪽 Shift를 누르고 있으면 Running, 때면 Walking 상태로 바꾸기를 구현 할 것이다.
Shift 키 누름 -> PlayableCharacter에서 StateComponent의 SetState(Running)함수 실행 -> StateComponent에서 State 바꾼 뒤 델리게이트 BroadCast -> PlayableCharacter에서 델리게이트에 바인딩 되어 있는 SetRunningMode 함수 실행
Shift 키 땜 -> PlayableCharacter에서 StateComponent의 SetState(Walking)함수 실행 -> StateComponent에서 State 바꾼 뒤 델리게이트 BroadCast -> PlayableCharacter에서 델리게이트에 바인딩 되어 있는 SetWalkingMode 함수 실행
- LeftShift InputAction 생성, StateComponent(Actor Component) 생성
(State Component의 객체 생성)
- InputAction (IA_LeftShift) 생성
(bool 값)
- InputMappingContext에 LeftShift 생성
- StateComponent의 OnStateChanged 델리게이트에 바인딩 할 함수와 Walking, Running State 일 때 실행 할 함수 생성
( IICharacter 인터페이스에 생성했으나 이런 것 까지 인터페이스화 해야하나 싶은 생각이 조금 든다. )
( LeftShift의 Pressed시 함수와 Released시 함수 생성, IICharacter 인터페이스에 만든 함수들 override )
( 위 함수들의 내용 )
- Action 바인딩과 델리게이트 바인딩
( Input Action 바인딩인데 UE4 때는 Pressed와 Released가 있었던 것으로 기억하는데 여기선 Started와 Completed로 구현 할 수 있었다. 이 것 말고도 다른 방법도 있을 것 같다. )
( StateComponent의 OnStateChanged 델리게이트에 만든 함수 바인딩 )
계획 한 대로 Shift를 꾹 누른 상태에선 Running 상태가 되고 속도가 빨라진다.
꾹 누르고 있더라도 Pressed 함수는 한 번만 실행이 된다.
Shift를 때면 Walking 상태가 되고 걷기 속도가 된다.
- 아무 움직임 입력 없을 시 Idle 상태로 바꾸기 구현 ( Move InputAction에 바인딩해서 구현해볼까? )
- Input Action에 바인딩 해서 State변환이라면 Jumping 상태도 추가 할 수 있을 것 같다. 추가해보기
- WalkSpeed와 RunningSpeed의 변수화
- 개선 할 구조 있을지 생각해보기 ( Shift 누를 시 Set State갔다가 다시 델리게이트로 Character 와서 함수 실행하는 과정이 옳은지 생각해볼것 )
- Walking -> Running, Running -> Walking 과정에서 속도가 뚝 뚝 하고 바뀌는걸 서서히 느려지거나 서서히 빨라지는걸 구현해보기 ( 나중에 해도 됨 )