언리얼의 네크워크에 대해 공부를 하다가 내가 이해하기 쉽게 정리해보았다.
멀티플레이 흐름
1. 멀티플레이 게임을 실행하면 언리얼 복제 시스템(Replication)이 모든 GameInstance가 동기화되도록 백드라운드에서 실행
2. 공유하는 세계를 가져옴(각 PC에서 자체적으로 GetWorld() 함)
+서버와 Client는 각각 개별의 UGameEngine을 가짐
3. 서버를 부팅하면 NetDriver가 생성되고 원격 프로세스(서버)의 메세지를 수신
4. 클라이언트를 부팅하면 클라이언트만의 NetDriver가 생성되고, 서버에 연결 요청을 보냄
5. 서버와 클라이언트의 NetDriver가 접촉하면 각 NetDriver 내에 NetConnection이 설정됨
+서버에는 연결된 플레이어 각각의 NetConnection을 가지고 있음
+각 클라이언트는 서버와의 연결을 나타내는 단일 NetConnection을 가지고 있음
6. 각 NetConnection에는 다양한 채널이 연결됨
일반적으로 Control Channel, VoiceChannel, 일련의 Actor Channel을 가지는데 해당 연결을 통해 복제되고 있는 각 액터에 대해 하나씩 있음
+네트워크 상에서 동기화 상태를 유지해야하는 경우 해당 액터를 복제하고, 이 채널들로 서버와 클라이언트가 해당 액테에 대한 정보를 교환하는 것.
+액터가 클라이언트에 복사될 때
- LifeTime
- 액터의 수명은 서버와 클라이언트 사이에서 동기화됨
- 서버에서 복제할 액터를 생성하면 클라이언트에 알림을 줘서 클라이언트에서 자체적으로 사본을 생성할 수 있게 함
- 서버에서 액터를 파괴하면 클라이언트에서도 파괴됨
- Property Replication
- 복제를 위한 속성(플래그)이 액터에 포함되어있는 경우에 해당 속성이 서버에서 변경되면, 새 값이 클라이언트로 전송되어서 클라이언트도 동기화됨
- 서버에서 클라이언트로 단방향만 복제가능
- RPC(Remote Procedure Call)
- 함수를 멀티캐스트 RPC로 설정하면 서버에서 해당 함수를 호출했을 때, 서버는 현재 액터가 복제되고 있는 모든 클라이언트에 메세지 전송 → 클라이언트는 알림을 받고 해당 함수를 호출해야함.
- 서버에서 클라이언트, 클라이언트에서 서버의 함수를 호출할 수 있게 하는 이벤트
- Server RPC : 클라이언트에서 서버의 함수를 호출(플레이어의 입력이나 행동을 서버로 전달할 때)
- Client RPC : 서버에서 클라이언트의 함수를 호출(서버가 게임 상태나 특정 명령을 클라이언트로 전달할 때)
- Multicast RPC : 서버에서 모든 클라이언트의 함수를 호출(전체 플레이어에게 동일한 이벤트나 업데이트를 전파할 때)
Pawn 클래스로 만들어진 액터여도 각 플레이어 컨트롤러는 Pawn을 기본적으로 상속받기 때문에 알고 있음. 따라서 서버는 각 PC의 가장 하단에 생성된 액터를 통해서도(클라이언트가 소유한 액터를 거슬러 올라가면서) 소유자가 누구인지 알 수 있음
- 액터 Replication
- 액터가 복제 대상으로 고려되려면 bReplicates = true여야함 (C++은 일반적으로 생성자에서 이 값을 설정, 블루프린트는 Detail 패널에서 Replicate 체크)
- 내가 이해한 복제된 액터를 동기화하는 내용 결론
- 서버는 각 UNetConnection에 연결된 Channel을 통해 ActorChannel에 접근하고, 이 때 Replicate 옵션을 확인. → 복사한다고 되어있으면 해당 액터를 클라이언트에 복제함
마지막 말
내일은 GameMode, GameInstance, PlayerController 들의 Replicate 과정을 공부해볼 예정이다.
'Unreal Engine' 카테고리의 다른 글
[ UE ] 훈련장모드 베이스 설계 (0) | 2025.04.03 |
---|---|
[ UE ] 데디케이트 서버 패키징을 해보자 (1) | 2025.03.31 |
[ UE ] 격투 게임 기획 및 설계 (0) | 2025.03.24 |
[UE, C++] 트러블슈팅, 멀티환경에서 카운트 개별 처리 (0) | 2025.03.21 |
[ UE, C++ ] Listen Server를 활용한 숫자 야구 게임 만들기 (1) (0) | 2025.03.19 |