멀티플레이를 넣으니, 멀티플레이 없이 Sunderstar를 만들 때 예상했던 것보다 개발 시간과 문제가 적어도 세 배는 늘어났습니다. 비교적 단순한 우주 슈팅 게임도 클라이언트와 서버가 함선이나 투사체의 위치에 동의하지 않으면 복잡해집니다.

문제는 기본 동작에서도 보였습니다. 서버 업데이트를 기다리느라 이동 입력 반응이 늦어졌습니다. 충돌 부근에서는 클라이언트와 서버의 차이 때문에 함선이 보정된 위치로 끌려 돌아갈 수 있었습니다. 늦게 도착한 업데이트는 원격 움직임을 부드럽게 유지하기 어렵게 했습니다.

사격에도 비슷한 문제가 있었습니다. 무기 탄퍼짐이 있으면 즉시 표시한 로컬 탄과 서버 투사체를 안정적으로 연결하기 어려웠습니다. 이전 서버 위치로 보정하면 탄이 뒤로 튀거나 속도가 바뀐 것처럼 보일 수 있었습니다. 명중 효과도 제때 나타나면서 서버 확인이 도착할 때 다시 번쩍이지 않아야 했습니다.

로컬 함선이 서버와 같은 계산으로 즉시 움직임을 예측하고, 서버 업데이트가 오면 차이를 보정하도록 바꿨습니다. 다른 함선은 받은 위치 사이를 부드럽게 이동하며, 업데이트가 늦으면 제한적으로 움직임을 추정합니다.

충돌에도 예측이 필요합니다. 클라이언트는 이제 서버의 충돌 데이터로 내 함선이 소행성이나 다른 함선에 어떻게 반응하는지 계산합니다. 로컬에서 움직이는 것은 내 함선뿐입니다. 작은 위치 보정은 부드럽게 처리하고 순간이동 같은 큰 변화는 즉시 적용합니다.

화면에 표시되는 투사체는 이제 뒤로 튀지 않고 서버의 방향을 따르며 일정한 속도를 유지합니다. 명중 효과는 로컬에서 나타나고, 같은 서버 효과는 억제해 한 번의 명중이 두 번 번쩍이지 않게 합니다. 명중과 피해는 여전히 서버가 결정합니다.

투사체 생성, 포구 섬광, 소리, 재생이 모두 포신 끝의 같은 위치를 사용하도록 했습니다. 이동 예측을 바꾸다가 Host 모드의 봇 소유권 버그까지 발견해 수정해야 했습니다.

자동 검사는 통과했고 Unity 네트워크 시뮬레이션의 지표도 이미 좋아졌습니다. 다만 전용 서버를 사용하는 실제 인터넷 플레이 세션에서 이 개선을 확인해야 합니다.

멀티플레이를 개발해 보셨다면, 단순해 보였지만 제대로 작동시키는 데 가장 오래 걸린 기능은 무엇이었나요?