- 개요
언리얼 엔진에서 효율적인 Replication을 위해 사용하는 FastArraySerializer를 추가한다
- FastArraySerializer란?

언리얼 엔진에서 일반적인 TArray를 대상으로 Replication을 수행하는 경우 다음과 같은 문제가 발생한다
배열 안의 수많은 아이템 중에서 단 하나의 아이템이 변경되어도 전체 아이템을 패킷에 담아서 전송하는데,
이는 대역폭의 큰 낭비를 유발한다

이런 문제를 해결하는 것이 FastArraySerializer이다
FastArraySerializerItem 구조체를 사용하여 내부 아이템을 구성하는데,
내부적으로 ReplicationID나 ReplicationKey와 같은 메타 데이터를 갖고 있어 엔진이 변경 사항을 추적할 수 있다
이후 메타 데이터의 변경 사항을 감지하여 FastArraySerializer에서 변경된 아이템만 Replicate한다
이런 방식을 통해 대역폭의 낭비를 방지할 수 있다
- 스크립트 작업
1) DedicatedServer.build.cs 파일

FastArraySerializer를 사용하기 위한 NetCore 모듈을 의존 관계에 추가한다
2) LobbyPlayerInfo 클래스

LobbyPlayerInfo 구조체를 추가한다
해당 구조체는 FastArraySerializerItem 구조체로부터 상속되어 FastArraySerializer 안에 저장된다
2개의 생성자를 통해 객체를 생성할 수 있고
UserName 멤버변수를 사용하여 플레이어의 이름을 저장한다

LobbyPlayerInfoArray 구조체를 추가한다
해당 구조체는 FastArraySerializer 구조체에서 상속되어 데이터를 저장한다
Players 멤버변수를 사용하여 LobbyPlayerInfo 객체들을 저장한다
NetDeltaSerialize 함수를 추가하여 Replication이 되면 해당 함수를 호출하여
내부적으로 FastArrayDeltaSerialize 함수를 호출하고 변경된 데이터만 직렬화하여 전송하도록 설정한다

TStructOpsTypeTraits 템플릿 함수를 선언하여 변경된 데이터만 직렬화하여 전송할 수 있도록 설정한다

AddPlayer 함수를 위와 같이 정의한다
Players 멤버변수에 인자로 받은 LobbyPlayerInfo를 추가하고 인덱스를 가져온다
가져온 인덱스에 해당하는 아이템의 Dirty 플래그를 설정하여 변경 사항을 기록하고
PostReplicatedAdd 함수를 해당 인덱스의 아이템으로부터 호출하여
클라이언트에서 데이터를 수신받은 후에 필요한 로직을 수행한다

RemovePlayer 함수를 위와 같이 정의한다
Players 멤버변수를 순회하면서 로직을 진행한다
순회중인 아이템이 인자로 받은 UserName과 동일하다면
순회중인 아이템으로부터 PreReplicatedRemove 함수를 호출하여
서버에서 데이터가 제거된 후에 클라이언트에서도 동일하게 데이터를 제거하기 전에 필요한 로직을 수행한다
이후 RemoveAtSwap 함수를 호출하여 효율적으로 순회중인 아이템을 제거하고
MarkArrayDirty 함수를 호출하여 배열이 변경되었음을 기록한다
'언리얼 엔진 - 게임 프로젝트 > AWS GameLift를 활용한 데디케이트 FPS 프로젝트' 카테고리의 다른 글
| PlayerSession 처리 - 3) AInfo 클래스와 AGameState 클래스 (0) | 2026.07.16 |
|---|---|
| PlayerSession 처리 - 1) PlayerSession 승인과 제거 (0) | 2026.07.12 |
| 로비와 타이머 - 최종) 퇴장 버튼과 타이머 개선 (0) | 2026.07.10 |
| 로비와 타이머 - 6) 플레이어 입력 제한 (0) | 2026.07.09 |
| 로비와 타이머 - 5) 로비 게임모드의 구성과 레벨 전환 (0) | 2026.07.05 |