들어가는 말
유니티의 목표는 멀티플레이어 경험을 제작하고 운영하는 데 필요한 교육과 도구를 제공하여 게임 개발의 민주화를 실현하는 것입니다. 이 가이드에서는 멀티플레이어 게임 개발 시 고려해야 할 8가지 요소에 대해 설명합니다.
멀티플레이어 게임 개발의 8가지 핵심 요소
모든 멀티플레이어 솔루션에는 개발 계획에 고려해야 할 장단점이 있습니다. 멀티플레이어 환경을 만들려면 먼저 각 요소에 대한 게임의 목표를 이해해야 합니다.
네트워크 지연 시간은 전송 경로를 따라 네트워크 간의 거리와 네트워크 성능에 따라 달라질 수 있습니다. 다른 사람과 함께 플레이할 때는 상대방이 나를 기다리는 만큼 내 디바이스가 정보를 보낼 때까지 기다려야 합니다.
게임 유형마다 게임 진행 속도에 대한 요구 사항이 다르기 때문에 각 게임마다 네트워크 지연에 대한 허용 수준을 설정해야 합니다. 예측 및 조정과 같은 기술을 사용하여 지연 시간을 숨길 수 있으므로 동기화 이벤트가 조금 느리게 들어오는 것은 괜찮습니다.
싱글플레이어 게임이 잘 실행되고 한 사람이 즐길 수 있도록 하기 위해서는 많은 노력이 필요하지만, 한 번에 얼마나 많은 플레이어를 수용할 수 있는지 어떻게 알 수 있을까요? 기술적으로 연결은 네트워크 모델에 따라 제한되며, 클라이언트-서버는 피어 투 피어보다 더 많은 동시 연결을 쉽게 처리할 수 있습니다.
게임에 참여하는 플레이어가 많을수록 동기화해야 하는 네트워크 활동을 더 많이 고려해야 할 가능성이 높아집니다. 프레임 속도를 유지하기 위해 에셋의 디테일 수준을 낮출 수 있는 것처럼, 더 많은 플레이어를 지원하기 위해 피어 간에 전송되는 정보 수준을 변경할 수도 있습니다.
게임에서는 시뮬레이션의 특정 요소가 플레이 결과에 필수적이지 않은 경우 모든 플레이어가 동기화되지 않아도 괜찮습니다. 이는 플레이어 장치와 전용 서버 머신이 사용할 수 있는 리소스가 한정되어 있기 때문에 최적화한 것입니다.
동기화된 시뮬레이션 규모를 줄이는 데 도움이 되는 다른 완화 방법은 다음과 같습니다: 호스트의 데이터 업데이트 빈도를 줄이고, 월드를 개별적으로 업데이트 가능한 영역으로 분할하고, 플레이어가 관심 있는 것만 업데이트를 구독하도록 합니다.
게임의 정밀도 요구 사항은 월드 상태 및 액터 계산과 관련된 모든 시스템에 영향을 미칩니다. 보다 정확한 결과를 원한다면 이러한 작업을 처리하는 데 더 많은 리소스가 필요하고 메모리 사용량도 늘어날 것입니다.
멀티플레이어에서 정밀도는 네트워크 공간의 오버헤드와 서버가 실행되는 속도에도 영향을 미칩니다.
모든 것이 정확해야 하는 것은 아니므로 게임의 규칙 세트와 결과에 중요한 것을 구분하는 것이 중요합니다. 나머지는 전체 성능을 절약하기 위해 더 낮은 수준의 근사치를 사용할 수 있습니다.
게임과 플레이어층에 적합한 모델을 선택할 때는 고려해야 할 사항이 많습니다.
개인 및 인디 개발자는 종종 더 저렴한 서버리스 솔루션을 선호하지만, 잠금(아래)과 부정 행위 증가 가능성으로 인해 제작한 게임의 전반적인 수익 잠재력이 제한될 수 있으므로 주의해야 합니다.
연결, 서버 용량 및 지연 시간을 개선하기 위해 서비스를 사용할 때, 서비스가 최대 동시 사용자를 기준으로 소비 요금을 부과하는 경우가 많다는 점을 이해하면 타이틀에 가장 적합한 선택지를 파악하는 데 도움이 됩니다.
멀티플레이어 개발은 다양한 네트워크 모델, 총 플레이어 수, 지연 시간 범위, 우수한 동기화 시뮬레이션 규모 설계 등 복잡성을 해결해야 하기 때문에 어려울 수 있습니다.
이러한 문제에 대한 해결책이 존재하지만 모두 사용하거나 이해하기 쉬운 것은 아니므로 스튜디오에서 먼저 모든 것을 적절히 평가하여 나중에 네트워킹 전문가가 필요하지 않도록 하는 것이 중요합니다.
훌륭한 문서, 따라 하기 쉬운 샘플, 활발한 지원 커뮤니티가 제공되는 솔루션을 사용하면 이러한 내재된 복잡성을 훨씬 쉽게 극복할 수 있습니다.
플레이어를 한데 모아 함께 플레이할 때 일부 플레이어는 불공정한 이점을 얻거나 시스템을 속이거나 혼란과 무질서를 조성하기 위해 게임이나 네트워크 트래픽을 조작하고 싶은 유혹을 받게 됩니다.
캐주얼 및 협동형 게임은 부정행위에 대한 인센티브가 크지 않지만 경쟁형 게임은 종종 파괴적인 플레이어의 표적이 됩니다. 치트 방지 기능은 게임의 평판을 보호하기 위해 이러한 행위에 대응하는 데 중요합니다.
클라이언트 로컬 머신의 모든 정보는 결국 악용될 가능성이 있으므로 부정 행위에 취약한 게임 유형은 클라이언트 이외의 하드웨어에서 서버 로직을 호스팅하는 것을 고려해야 합니다.
마지막으로 고려해야 할 요소는 락인, 즉 결정을 내리고 나면 향후 옵션이 제한되는 것입니다. 한 가지 네트워킹 모델을 선택하면 게임에 치트 관리와 같은 고급 기능이 필요한 경우 다른 네트워킹 모델로 전환하기가 매우 까다로울 수 있습니다.
업그레이드가 쉬운 솔루션을 선택하는 것은 향후 많은 게임의 성공을 위해 중요합니다. 예를 들어, 피어 투 피어 모델은 클라이언트 서버 모델로 전환하려면 거의 항상 완전히 다시 작성해야 합니다. 하지만 게임 디자인에서 미리 계획을 세운다면 클라이언트-서버 변형 간에 이동하는 것이 더 실현 가능성이 높습니다.