언리얼 엔진5 Advanced - 액터 리플리케이션 기초

타입·2025년 4월 1일
0

언리얼 강의

목록 보기
27/47

액터 리플리케이션 기초

액터 리플리케이션

특정 플레이어에 속한 액터의 정보를 네트워크 내 다른 플레이어에게 복제하는 작업
클라이언트-서버 모델에서는 대부분 서버에서 클라이언트로 전달

  • 리플리케이션의 방법
    프로퍼티 리플리케이션
    RPC(Remote Procedure Call)

기본 액터의 로딩

클라이언트가 초기화 될 때 모든 액터 정보를 서버로부터 받는 것은 비효율적
따라서 기본 배경에 관련된 액터는 맵을 통해 스스로 로딩하도록 설계되어 있음

  • 고정으로 제공하는 액터
    레벨을 구성하는 배경 액터
  • 동적으로 생성하는 액터
    플레이어 컨트롤러, 폰

고정 액터에 대해 NetLoadOnClient 속성을 체크해야 함 (기본값)
서버와 통신 없이 클라이언트가 초기화 될 때 자체적으로 로딩하여 서버에서 콘텐츠를 배포한 것과 동일한 효과를 얻어낼 수 있음

프로퍼티 리플리케이션의 구현

액터의 리플리케이션

고정으로 보여지는 액터 중, 게임 중 변경 사항이 발생하는 액터는 그 값을 전달해야 함
네트워크 데이터를 최소화하기 위해 변경 사항을 보내기보다, 변경을 유발한 속성 값을 전달
이를 위해 액터의 Replicates 옵션을 체크해야 함

리플리케이션 프로퍼티(속성)의 지정

  1. 액터의 리플리케이션 속성을 참으로 지정
    bReplicates 속성을 true로 설정
  2. 네트워크로 복제할 액터의 속성을 키워드로 지정
    UPROPERTY에 Replicated 키워드 설정
  3. GetLifetimeReplicatedProps() 함수 오버라이드하여 네트워크로 복제할 속성을 추가
    #include "Net/UnrealNetwork.h" 헤더 파일 지정
    DOREPLIFETIME 매크로를 사용해 복제할 속성을 명시

Lifetime은 액터 채널의 Lifetime을 의미함
즉, 활성화된 액터 채널로 전송할 복제될 속성을 의미함

리플리케이션 콜백 함수 호출

  1. 클라이언트에 속성이 복제될 때 콜백 함수가 호출되도록 구현
    UPROPERTY의 Replicated 키워드를 ReplicatedUsing 키워드로 변경
    ReplicatedUsing에 호출할 콜백 함수를 지정
    호출될 콜백 함수는 UFUNCTION으로 선언해야 함
  2. 콜백 함수의 구현
    일반적으로 OnRep_ 접두사를 가지는 이름 규칙을 가짐
    콜백 함수는 서버가 아닌 클라이언트에서만 호출됨
  • OnActorChannelOpen()
    액터 채널이 열리면 호출
    물론 PostNetInit() 이후에 호출되고, Replicate가 되기 전 호출됨

C++ OnRep vs 블루프린트 RepNotify

  • C++ ReplicatedUsing
    클라이언트에서만 호출됨
    함수를 명시적 호출 가능
    값이 변경된 때만 호출됨
  • Blueprint RepNotify
    서버/클라이언트에서 호출됨
    명시적 호출 불가능
    서버는 항시 호출됨, 클라이언트는 값이 변경된 때만 호출됨

실습코드

https://github.com/dnjfs/ArenaBattle_Network/commit/440d1b5a4934b97bb0553abee066a2e5fda66032

  • GetLifetimeReplicatedProps() 오버라이딩
    프로퍼티 리플리케이션을 위하여 DOREPLIFETIME 매크로로 프로퍼티 추가
profile
주니어 언리얼 프로그래머

0개의 댓글