어렵다 어려워 멀티플레이!
지난번에는 짧은 인풋에도 캐릭터가 정상적으로 회전을 마치도록 Tick함수에 마지막으로 입력받은 방향으로 회전하도록 작성하여 해결을 했었다. 그러고 나서 남은 시간에 Sprint를 구현하여 캐릭터가 달릴 수 있게끔 작업을 해주었다. 하지만 우리가 만들고 있는 게임은 3vs3 '멀티플레이' 캐주얼 대전게임 멀티플레이기 때문에 캐릭터의 달리기, 회전, 이동과 같은 모든 동작은 서버를 통해 상대 클라이언트로 전송되어야 한다. 일단 Sprint부터 작업해 보도록 하자

SetupPlayerInputComponent를 통해서 Bind해준 함수들은 ServerRPC함수를 호출하게끔 해준다. 저기서 SetSprintSpeed는 나중에 설명하도록 하겠다.

SeverRPC에서는 다음처럼 Server에서 SetSprintSpeed를 호출하게끔 되어있다. Sprint시에는 True를 아니면 false를 인자로 받게끔 되어있는 이 함수는

다음처럼 true일때는 달리기 속도로 false일 때는 일반 걷기 속도로 MaxWalkSpeed를 변경해 준다. 위의 구조를 보면 알겠지만 이는 클라이언트와 서버에서 둘 다 실행되게끔 되어있다. 서버와 클라이언트의 오차를 조금이라도 줄이기 위해서 동시에 실행해 주도록 했다 사실 이러한 작업을 하게 된 계기는 StandAlone에서는 부드럽게 움직이던 캐릭터가 서버환경을 구성하여 Client로서 플레이를 할 때는 뭔가 움직임이 뚝 뚝 끊기는 현상이 있었던 것이었고 이것저것 찾아본 결과 이렇게 적용하니 부드럽게 움직이게 되었다. 이처럼 Sprint도 다음과 같이

TargetRotation을 서버로 보내서 내 캐릭터가 회전하는걸 다른 클라이언트에서 봤을때도 똑같이 회전하게끔 했다. 당연히 TargetRotation에 UPROPERTY(Replicated) 매크로를 통해서 레플리케이션이 가능하게끔 설정해 주고
GetLifetimeReplicatedProps에 등록하였다. 이렇게 Sprint와 Rotation의 레플리케이션은 어느정도 해결했다.
하지만 여기서 발생하는 또 다른 문제
이건 영상을 같이 보도록 하자
이 또한 서버 환경에서만 생기는 현상으로 이 문제를 해결하기 위해서 또 이리저리 뒤져봐야겠다.
'unreal 5기' 카테고리의 다른 글
| 251217 언리얼엔진 본캠프 90일차 멀티플레이 팀프로젝트5 (0) | 2025.12.17 |
|---|---|
| 251215 언리얼엔진 본캠프 88일차 멀티플레이 팀프로젝트4 (1) | 2025.12.15 |
| 251210 언리얼엔진 본캠프 85일차 멀티플레이 팀프로젝트2 (0) | 2025.12.10 |
| 251209 언리얼엔진 본캠프 84일차 멀티플레이 팀프로젝트1 (2) | 2025.12.09 |
| 251208 언리얼엔진 본캠프 83일차 소켓(Socket) (0) | 2025.12.08 |