단일 머신에서 멀티플레이어를 테스트하려면 게임 인스턴스를 여러 개 실행해서 하나는 서버 역할을 하고 나머지는 클라이언트 역할을 하게 해야 합니다. 보통은 그러면 리플리케이트된 데이터에 이상적인 조건을 갖춘 환경이 만들어집니다. 리플리케이트된 데이터는 적절한 시스템을 통해 실제 네트워크 환경에서와 유사하게 전달되지만, 지연이나 패킷 손실이 없으므로 최종 사용자에게 배포된 뒤에 어떻게 작동할지는 정확하게 파악할 수 없습니다. LAN 기반 테스트에도 비슷하게 이러한 조건이 적용되지 않습니다.
네트워크 에뮬레이션(Network Emulation) 은 서버와 클라이언트의 지연과 패킷 손실을 시뮬레이션합니다. 이 시뮬레이션은 네트워킹 환경에서 발생할 수 있는 문제를 식별하는 데 매우 중요합니다. 네트워크 에뮬레이션 세팅은 언리얼 에디터(Unreal Editor) , 명령줄, 콘솔, 환경설정 파일에서 환경설정할 수 있습니다.
네트워크 에뮬레이션 활성화
언리얼 에디터
네트워크 에뮬레이션을 사용하려면 메뉴 바(Menu Bar) 에서 편집(Edit) > 에디터 개인설정(Editor Preferences) > 레벨 에디터(Level Editor) > 플레이(Play) > 멀티플레이어 옵션(Multiplayer Options) 으로 이동해서 네트워크 에뮬레이션 활성화(Enable Network Emulation) 체크박스를 활성화합니다. 그러면 네트워크 에뮬레이션 세팅이 활성화됩니다.
에디터에는 사전 빌드된 네트워크 에뮬레이션 프로파일(Network Emulation Profile) 인 Custom , Average , Bad 가 있습니다. 이 프로파일들은 제공된 필드를 사용하여 네트워크 에뮬레이션 세팅을 커스터마이징합니다.
- 들어오는 트래픽(Incoming Traffic) : 수신 패킷의 딜레이 또는 손실을 유발합니다.
- 최소 지연시간(Minimum Latency) : 밀리초 단위의 최소 시간 랙입니다(
PktIncomingLagMin에 대응). - 최대 지연시간(Maximum Latency) : 밀리초 단위의 최대 시간 랙입니다(
PktIncomingLagMax에 대응). - 패킷 손실 퍼센티지(Packet Loss Percentage) : 패킷이 수신되기 전에 손실될 확률입니다(
PktIncomingLoss에 대응).
- 최소 지연시간(Minimum Latency) : 밀리초 단위의 최소 시간 랙입니다(
- 나가는 트래픽(Outgoing Traffic) : 송신 패킷의 딜레이 또는 손실을 유발합니다.
- 최소 지연시간(Minimum Latency) : 밀리초 단위의 최소 시간 랙입니다(
PktLagMin에 대응). - 최대 지연시간(Maximum Latency) : 밀리초 단위의 최대 시간 랙입니다(
PktLagMax에 대응). - 패킷 손실 퍼센티지(Packet Loss Percentage) : 패킷이 수신되기 전에 손실될 확률입니다(
PktLoss에 대응).
- 최소 지연시간(Minimum Latency) : 밀리초 단위의 최소 시간 랙입니다(
명령줄
다음 구문을 사용하여 명령줄 실행인자로 세팅을 지정할 수 있습니다.
<SETTING_NAME>=<VALUE>
콘솔
다음 구문을 사용하여 런타임에서 콘솔로부터 세팅을 지정할 수 있습니다.
NetEmulation.<SETTING_NAME> <VALUE>
환경설정 파일
DefaultEngine.ini 등 엔진 환경설정 파일에서 값을 설정하려면 [PacketSimulationSettings] 섹션을 환경설정 파일에 추가한 뒤 지정할 <SETTING_NAME>=<VALUE> 쌍을 입력합니다.
[PacketSimulationSettings]
<SETTING_NAME>=<VALUE>
<SETTING_NAME>=<VALUE>
...
세팅 레퍼런스
이 세팅은 네트워크 에뮬레이션을 커스터마이징할 다양한 조합을 제공합니다.
| 세팅 | 설명 | 값 | |
|---|---|---|---|
Off |
네트워크 에뮬레이션을 끕니다. | 토글 명령입니다. 값이 필요하지 않습니다. | |
PktLoss |
나가는 패킷이 버려질 확률을 퍼센트로 지정하여 패킷 손실을 시뮬레이션합니다 | 0(버려지는 패킷 없음)에서 100(모든 패킷 버려짐) 사이로 범위제한됩니다. | |
PktOrder |
패킷 순서를 랜덤하게 변경합니다. 다음 FlushNet 호출까지 딜레이될 패킷을 랜덤하게 선택하여 작동합니다. |
0 = False, 그 외 = True | |
PktDup |
전송된 나가는 패킷이 복제될 확률을 지정합니다. | 0(복제되는 패킷 없음)에서 100(모든 패킷 복제됨) 사이로 범위제한됩니다. | |
PktLag |
밀리초 단위로 지정된 시간만큼 패킷 전송을 지연합니다 | 참고 : PktOrder 와 함께 사용할 수 없습니다. |
값은 밀리초 단위입니다. |
PktLagVariance |
패킷 랙을 일정한 밀리초 시간이 아닌 랜덤 변수로 합니다. 설정하면 랙이 [PktLag - PktLagVariance, PktLag + PktLagVariance] 의 랜덤 변수가 됩니다. 참고 : PktLag 이 활성화되었을 때만 활성화 가능합니다. |
값은 [-Variance, Variance] 범위에서 랜덤하게 선택됩니다. |
|
PktLagMin |
패킷이 최소 랙을 갖게 합니다. | 값은 밀리초 단위입니다. | |
PktLagMax |
패킷이 최대 랙을 갖게 합니다. | 값은 밀리초 단위입니다. | |
PktIncomingLagMin |
패킷이 받는 측에서 최소 랙을 갖게 합니다. | 값은 밀리초 단위입니다. | |
PktIncomingLagMax |
패킷이 받는 측에서 최대 랙을 갖게 합니다. | 값은 밀리초 단위입니다. | |
PktIncomingLoss |
들어오는 패킷이 버려질 확률을 퍼센트로 지정하여 패킷 손실을 시뮬레이션합니다 | 0(버려지는 패킷 없음)에서 100(모든 패킷 버려짐) 사이로 범위제한됩니다. | |
PktJitter |
가능한 패킷 랙 시간의 범위에 PktJitter 값을 추가하여 보내는 패킷이 가변 유동 지연시간을 갖게 합니다. |
값은 밀리초 단위입니다. | |
PktEmulationProfile |
사전 정의된 에뮬레이션 프로파일을 설정합니다. | 프로파일의 이름입니다. |
사용 추천
멀티플레이어 게임이 완벽한 연결 조건으로 실행되면 연결이 좋지 않을 때만 발생하는 여러 버그를 경험하지 않게 됩니다. 이러한 버그를 확실히 발견하려면 다음과 같은 극도로 열악한 조건에서 로컬 및 LAN 기반 테스트를 수행해야 합니다. 예를 들면 다음과 같습니다.
- 왕복 핑 500회.
- 패킷 손실 10% 이상.
에픽게임즈 에서는 이러한 조건으로 협동 및 경쟁 게임플레이를 테스트합니다. 이를 통해 일반적인 테스트 조건에서 간과할 수 있는 다양한 버그와 악용을 포착하고 네트워크 성능 최적화를 강력하게 장려할 수 있습니다.