PIE 멀티플레이 테스트 환경 만들기
5강. PIE 멀티플레이 테스트 환경 만들기
1. 이번 강의에서 해결할 문제
한 창에서 정상인 기능은 네트워크 검증이 아닙니다. 창마다 설정이 달라지거나 어느 창이 서버인지 모르면 버그를 재현할 수 없습니다. 특히 리슨 호스트는 권한과 로컬 제어를 함께 가지므로 원격 클라이언트에서만 생기는 실패를 숨깁니다.
2. 학습 목표
3. 핵심 개념
Editor의 Play 메뉴와 Editor Preferences의 Multiplayer Options에서 플레이어 수, Net Mode, Single Process, Separate Server와 창 크기를 조정할 수 있습니다. 메뉴 문구는 UE5 세부 버전에 따라 다르므로 Testing Multiplayer 공식 문서의 현재 버전을 확인합니다.
Single Process는 시작이 빠르지만 여러 PIE World가 한 Editor 프로세스와 Output Log를 공유합니다. 별도 프로세스는 실제 실행 경계와 비슷하고 창·로그 파일을 분리하기 쉽지만 시작이 느립니다. Travel과 Online Subsystem은 PIE 특유의 접두사와 프로세스 공유 때문에 패키지와 다르게 동작할 수 있으므로 후반 강의에서 별도 실행을 추가합니다.
4. 단계별 실습
프로필 A · 빠른 리슨 회귀
- Play Mode를 New Editor Window (PIE)로 설정합니다.
- Number of Players를 2로 설정합니다.
- Net Mode를 Play As Listen Server로 둡니다.
- 창 크기를 800×450 정도로 맞춰 두 창을 동시에 봅니다.
- 서버 창과 Client 1 창에서 이동·Spawn·로그를 확인합니다.
프로필 B · 데디케이티드 경계
- Play As Client 또는 Launch Separate Server를 선택합니다.
- 클라이언트 창은 2개, 별도 서버는 렌더링하지 않게 실행합니다.
- 서버 프로세스 로그와 각 클라이언트 창을 구분합니다.
GetFirstPlayerController()나 Widget을 요구하는 서버 코드가 없는지 확인합니다.
로그 구분 규칙
#pragma once
#include "CoreMinimal.h"
DECLARE_LOG_CATEGORY_EXTERN(LogCaptureNet, Log, All);
#define CA_NET_LOG(Owner, Verbosity, Format, ...) \
UE_LOG(LogCaptureNet, Verbosity, TEXT("[%s][%s] " Format), \
*UEnum::GetValueAsString((Owner)->GetNetMode()), \
*((Owner)->GetName()), ##__VA_ARGS__)
각 PIE 인스턴스의 메시지가 한 Output Log에 섞이면 NetMode, Actor 이름과 필요하면 GetWorld()->GetPackage()->GetPIEInstanceID()를 함께 기록합니다. 별도 프로세스에서는 각 프로세스 콘솔 또는 프로젝트의 Saved/Logs 파일을 시작 시각·PID와 함께 보관합니다.
Network Emulation
Editor Preferences의 Network Emulation에서 지연·손실 프로필을 활성화합니다. 첫 기준은 정상, 100ms 지연, 5% 손실 세 가지입니다. 극단적인 값은 기능이 아니라 복구·타임아웃 UX를 확인할 때 사용합니다.
5. 코드가 동작하는 이유
같은 로그 메시지라도 NetMode와 Actor 복사본이 다르면 의미가 다릅니다. 접두사는 “어느 프로세스/World/Actor에서 실행됐는가”를 먼저 증명해 호스트 창에서만 성공한 코드를 찾게 합니다. 두 프로필을 저장하면 기능마다 리슨과 별도 서버를 같은 순서로 반복할 수 있습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
PIE 멀티플레이 테스트 환경 만들기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.