언리얼 Replication

  • Replication이란
    • Network Framework API 를 상속받아 구현한 구현체
    • RPCs와 Notify를 하는 부분과 자동화에서 Actor Replication하는것
    • Actor Replication
      • 클라이언트에서 서버에 Spawn해달라고 요청하면 서버에 Spawn된 액터와 클라이언트에 Spawn된 액터와 연결이 되어있음
      • Property Replicatuin이 되어 있어야 액터의 값이 동기화 되어있음
    • 출처: https://unrealcommunity.wiki/unreal-schematics-2d6859
 

Unreal Schematics | Unreal Engine Community Wiki

Unreal schematics featuring Animation, Blueprint, Character, Engine, Materials, Programming, Rendering & World Building

unrealcommunity.wiki

  •  RepNotify
    • 용도: 값 변경 시 서버->클라리언트 로 이벤트 호출
    • 호출 방법 : 자동
    • 실행 : 클라이언트
    • 네트워크가 연결되어 있으면 신뢰 가능
UPROPERTY(ReplicatedUsing=OnRep_HealthChanged)
int32 PlayerHealth = 100;

UFUNCTION()
void OnRep_HealthChanged();
  • ActorReplication
    • 용도 : 변수 값의 동기화 및 오너쉽 관리로 서버->클라리언트
    • 호출방법: 자동
    • 실행: 서버에서 값 변경 후 클라이언트에 반영
    • 네트워크가 연결되어 있으면 신뢰 가능
UPROPERTY(Replicated)
int32 PlayerHealth = 100;
  • RPCs
    • 용도: 서버와 클라이언트간 양방향 함수 호출
    • 호출 방법 : 수동
    • 실행: 서버, 클라이언트
    • Reliable / Unreliable 선택 가능
UFUNCTION(Server, Reliable)
void ServerFireWeapon();

UFUNCTION(NetMulticast, Unreliable)
void MulticastPlayExplosionEffect();
  • Listen Server 와 Dedicated Server
    • 게임에서 서버란 사용자의 데이터를 저장하는 기능 외에 게임의 심판 역할을 하는로직 전체
    • Dedicated Server
      • 특정 목적으로 번역이 될 수 있음
      • 전용서버라는 뜻으로 서버의 로직만 추려 빌드 된 버전
      • 별도 빌드: 필요
      • 클라이언트 기능 포함: 안함
      • 보안: 좋음
      • 용도: 독립 서버를 갖춘 게임 환경
      • 개발난이도: 상대적으로 깔끔
    • Listen Server
      • 클라이언트 중 하나가 서버의 기능을 겸직
      • 별도 빌드: 불필요
      • 클라이언트 기능 포함: 포함
      • 보안 : 해킹에 취약
      • 용도: LAN 환경에서 근거리 그룹
      • 개발 난이도: 클라이언트와 서버의 기능이 합펴져 있으므로 권한 체크 필수

객체간 통신

  • 이벤트 디스패처(Event Dispatcher)
    • 프로그래밍에서 강한 결합 또는 강한 객체간 연결을 피하기 위해 언리얼에서 제공하는 기능
    • A라는 객체에서 이벤트 등록, B라는 객체에서 A의 이벤트 구독하는 원리로 작동
    • 이벤트는 A가 B,C 객체에 메시지를 전달하여면, B와 C를 형변환한 뒤 각각의 객체의 이벤트 호출
    • 이벤트 디스패처는 A에 등록된 이벤트 디스페처를 통해 B와 C가 구독하고 있다가 A의 이벤트 디스페처가 호출 시 B, C에게 바인딩 된 이벤트를 호출하므로 빠른 처리 가능
    • 생성한 이벤트 Replicates 속성 Multicast, Run On Server, Run on owning Client로 설정하면, 바로 RPC가 됨

게임 모드 및 게임 스탯, 플레이어 컨트롤러

  • 서버에서만 작동하는 로직을 호출하고, 서버가 클라이언트에 메시지를 전달하는 방법?
    • 플레이어 컨트롤러 중심으로 게임 요소들과의 관계를 알아야함
    • 이 이미지를 보면 플레이어 컨트롤러가 GameMode와 스탯에 들어가 있음
    • 플레이어 컨트롤러는 HUD, 입력, 플레이어 카메라 등을 포함하고 있음
    • 이를 네트워크 환경으로 가져가면 아래 그림처럼 됨
    • 만약 위젯 블프에서 서버 로직이 있는 게임 모드, 게임 스텟 등으로 접근하려면 반드시 플레이어 컨트롤러를 거쳐야함
    • 반대 경우도 마찬가지임

'Unreal Bootcamp > 네트워크' 카테고리의 다른 글

2. 온라인 게임과 네트워크 구  (0) 2025.03.11
1. 네트워크 개념  (1) 2025.03.10