Idle, Walking, Running, Jumping, Attacking, Casting 등으로 구성
현재는 Idle, Walking, Running, Jumping 만 감지하고 Set하도록 구현되어 있다.
PlayableCharacterBase에 ActorComponent로 추가되어 있으며 Character에 현재 상태를 판단하는 함수가 구현되어 있고, 이 함수의 호출도 캐릭터의 함수들에 추가되어 있다.
내가 애초에 원하던건 Actor Component를 추가만 하면 자동으로 적용되는 것이였고, 이는 코드의 재사용성을 높여주고 개발자가 아닌 기획자나 QA가 테스트 해보기 좋도록 만들자는 목표에 맞는 방식이다. 또 Character에 코드를 추가하지 않으므로 모든 기능이 모이는 Character의 코드가 깔끔해진다.
하지만 지금은 그렇게 구현되어 있지 않다. StateComponent는 코드가 별로 없고 Character에 사실상 전부 구현되어 있다.
- State 판단하는 함수를 Character에서 StateComponent로 이동
이 함수를 StateComponent로 옮기고 그에 맞게 코드 수정
- MovementModeChangedDelegate를 Character에서 StateComponent로 이동
MovementModeChangedDelegate 바인딩 부분과 바인딩 할 함수를 이동시키기
★ 중요
State 판단하는 함수는 현재 Move(축 입력) 함수와 MoveEnd(Move입력 Completed시 호출) , MovementModeChangedBind 함수에서 호출하고 있다.
문제는 Move(축 입력)과 MoveEnd함수인데 Actor Component를 추가한다고 없던 코드를 생기게 할 수는 없다고 생각하므로 두 가지 방식을 고려해보고 있다.
- GetComponentByClass를 사용하여 StateComponent를 불러보고 존재하면 State판단 함수 콜
- Move함수와 MoveEnd함수가 실행되면 BroadCast할 델리게이트 추가
다른 방법은 더 있는지 고민해봐야겠다.
개발자로서 배울 점이 많은 글이었습니다. 감사합니다.