서버는 하나의 오소리티가 있는 게임스테이트를 가짐
서버는 게임 스테이트의 정보를 리플리케이트하여 클라이언트에 보내고 이 값을 토대로 클라이언트는 게임을 비슷하게 시뮬레이션
엑터의 리플리케이션
리플리케이션을 통해 서버의 내용을 클라이언트로 복제
- 생성 및 소멸
- 서버에서 오소리티 액터 스폰, 모든 클라이언트에 자동으로 원격프록시 엑터 생성
오소리티에 있는 엑터 소멸 시, 모든 클라이언트의 원격프록시도 소멸
- 무브먼트 리블리케이션
- 오소리티있는 엑터에 대해 무브먼트 리플리케이트가 활성화되어 있거나 C++에서 bReplicateMovement = True가 되어 있다면 자동으로 위치, 회전, 속도가 리플리케이트
- 변수 리플리케이션
- 리플리케이트 변수로 지정된 변수는 값이 변경될 때마다 오소리티에 있는 엑터에서 원격 프록시로 자동 리플리케이트
- 컴포넌트 리플리케이션
- 엑터 컴포넌트가 엑터 컴포넌트를 소유한 엑터의 일부로 리플리케이트된다. 컴포넌트 내의 모든 변수가 리플리케이트, 컴포넌트 내에서 호출된 모든 RPC가 엑터 클래스에서 호출된 RPC와 동일하게 행동
- 원격 프로시저 호출(RPC)
- 네트워크 게임에서 특정 컴퓨터로 전송되는 특별함수, 처음 RPC를 호출한 컴퓨터가 무엇이든 지정된 컴퓨터에서만 RPC 구현이 호출, 서버( 서버에서만 실행 ), 클라이트언트( Owning인 클라에서 실행 ), NetMulticast ( 서버포함 모든 클라이언트에서 실행 )로 지정가능
리플리케이트가 되지 않는 피처
- 스켈레탈 매쉬, 스태틱 메쉬
- 머터리얼
- 파티클 시스템
- 사운트 이미터
- 피직스 오브젝트
이 요소는 클라이언트에서 개별 실행, 이러한 시각적 요소를 구동하는 변수가 리플리케이트 되면, 모든클라이언트가 같은 정보를 보유 하여, 거의 같은 방식으로 해당 요소 시뮬레이션 됨
엑터의 네트워크 역할
엑터를 제어할 컴퓨터를 지정해준다.
로컬 역할(Local Role), 원격 역할(Remote Role) 변수로 추적, 다음값을 가질 수 있다.
- None - 없음
- Authority - 오소리티 있는 엑터이면 다른 컴퓨터에 있는 엑터의 원격 프록시로 정보를 리플리케이트
- Simulated Proxy - 원격 프록시인 엑터로 오소리티 있는 엑터에게 완전 제어 (e.g. 대부분의 엑터)
- Autonomous Proxy - 엑터가 일부 함수를 로컬에서 실행할 수 있지만, 오소리티 있는 엑터로 부터 보정을 수신하는 원격 프록시, (e.g. 폰)
언리얼 엔진에서 사용하는 기본 모델은 서버-오소리티 모델이다. 항상 서버가 게임 스테이트에 대한 오소리티를 보유.
서버의 엑터는 로컬역할로 ROLE_Authority예상, 원격 클라이언트 대응 엑터가 ROLE_SimulateProxy or ROLE_AutonomousProxy 역할일 것으로 예상
클라이언트 오너십
네트워크 게임에 있는 폰은 특정 클라이언트 컴퓨터의 플레이어 컨트롤러가 소유.
폰이 클라이언트 전용 함수를 호출할 때마다, 소유 플레이어의 컴퓨터로만 전달
오너변수가 특정 폰으로 설정된 엑터은 연관을 통해 해당 폰의 소유 클라이언트에 소유됨
C++에서 IsLocallyControlled 함수나 블루프린트의 IsLocallyContrlled노드를 사용하여 폰이 헤당 소유 클라이언트에 속하는지 여부를 결정할 수 있음
Reference
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/networking-overview-for-unreal-engine
'Unreal' 카테고리의 다른 글
[Unreal] 클라이언트 오너쉽 (0) | 2025.04.04 |
---|---|
[Unreal] Role, Remote Role (0) | 2025.04.04 |
[Unreal] 채팅 서버 구현 (0) | 2025.03.13 |
[Unreal] 온라인 게임의 네트워크 구성 (0) | 2025.03.11 |
[Unreal] 패키징 시 체크리스트 (0) | 2025.03.10 |