Closed RedChiken closed 4 years ago
범위 밖에서 상호작용을 해도 Climb 상태가 되는 경우가 있다. 상호작용 코드에 있는 조건이 잘못된 것 같다.
Climb 조건이 Falling이 빠져 있고, MovementMode만 체크를 하다보니 아무때나 Climbing이 가능하였다. 조건을 수정하여 시도때도없이 Climbing이 되는 것을 막았다.
Client에서는 MovementType이 Climb로 바뀌지 않는다. 이것이 원인이라 예상 중이다.
MovementType은 코드가 누락이었지만 정말 문제는 MovementMode였다. 버튼을 누르는 순간에는 값이 바뀌지만, 그 직후에 원상복귀된다.
MovementMode 값 변경을 RPC 함수로 묶어서 사용하니까 해결되었다. 생각해보니 이걸 그냥 하는것 자체가 멍청한 짓이었다. 각 Client/Server에 Character를 생성해놓고 Controller가 권한 있는 Character만 움직이면서 권한 없는 Character는 권한 있는 Client로부터 움직임을 받아온다. 때문에 MovementComponent는 Character와 같이 RPC로 값이 공유되어야 한다. 그 안에 변수를 바꾸는 것도 RPC로 묶어줬어야 했다.
기존 구조로는 도저히 구현이 안되서 바뀐 구조로 적용. 차이점은 다시 한번 Sub-FSM을 생성하느냐 아니냐의 차이.
그 결과 대부분의 Animation이 정상작동한다. 다만 아직 Exit Climb 부분이 정상적으로 작동하지 않는다. 물론 보는 것에는 문제가 없지만 의도했던 바를 구현하려 한다.
등반이 가능한 오브젝트들에 대한 구현 방식을 재정리
오브젝트의 콜리전을 지정. 캐릭터 배 앞에 작은 component를 설치. 그리고 이 component 위와 아래에 component를 설치. 이 3개의 component의 overlap 상태에 따라 등반과 ledge 상태 선택 가능.
명확한 Animation 재생과 상태 적용을 위해 다이어그램을 다시 작성. 이를 기반으로 제대로 만들어보자.