WIL Unreal 멀티플레이 네트워크

정혜창·2025년 3월 18일
0

내일배움캠프

목록 보기
38/43
post-thumbnail

🎮 언리얼 엔진 멀티플레이 네트워킹 개념 정리

언리얼 엔진의 멀티플레이 네트워킹을 이해하기위해 클라이언트-서버 모델과 레플리케이션(Replication) 개념을 중심으로 학습했음.


🎮 언리얼 엔진의 네트워크 아키텍처

언리얼은 클라이언트-서버 모델을 사용하여 멀티플레이를 처리한다. 이를 통해 데이터 일관성을 유지하면서 여러 플레이어가 동일한 게임 환경을 공유할 수 있음.

1️⃣ 클라이언트-서버 모델

  • Dedicated Server (전용 서버)

    • 별도의 서버 프로그램이 실행되며, 클라이언트는 여기에 접속.
    • 플레이어는 서버를 직접 호스팅하지 않고, 게임 서버를 통해 접속하는 구조.
    • 일반적으로 대규모 멀티플레이 게임에서 사용.
  • Listen Server (호스트 플레이어 서버)

    • 한 명의 플레이어가 서버 역할을 하면서 동시에 게임을 플레이.
    • P2P처럼 작동하지만, 기본적으로 서버-클라이언트 모델을 유지.
    • 작은 규모의 멀티플레이 게임에서 사용.
  • Peer-to-Peer (P2P) (언리얼 기본 지원 없음)

    • 별도의 중앙 서버 없이 플레이어들이 직접 연결되는 방식.
    • 언리얼 엔진 기본 네트워크 시스템은 지원하지 않으며, 별도의 플러그인이 필요하다.

2️⃣ 언리얼 엔진의 네트워크 클래스 역할

언리얼에서는 다양한 클래스를 사용하여 멀티플레이를 관리한다.


🎮 언리얼 엔진 네트워크 통신 방식

1️⃣레플리케이션 (Replication)

서버에서 데이터를 클라이언트에 동기화하는 기능. 특정 변수를 UPROPERTY(Replicated)로 선언하거나, AActor::GetLifetimeReplicatedProps() 를 오버라이드하여 레플리케이션을 설정할 수 있다.

📋 MyCharacter.h
UCLASS()
class AMyCharacter : public ACharacter
{
    GENERATED_BODY()

public:
    UPROPERTY(Replicated)
    int32 PlayerScore;

    virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
};
📋 MyCharacter.cpp
void AMyCharacter::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
    Super::GetLifetimeReplicatedProps(OutLifetimeProps);
    DOREPLIFETIME(AMyCharacter, PlayerScore);
}

2️⃣ 서버 RPC (Remote Procedure Call)

클라이언트가 서버에 요청을 보내 특정 함수를 실행할 수 있다.

📋 cpp
UFUNCTION(Server, Reliable, WithValidation)
void Server_DoAction();

void AMyCharacter::Server_DoAction_Implementation()
{
    // 서버에서 실행될 코드
}

bool AMyCharacter::Server_DoAction_Validate()
{
    return true; // 검증 로직 추가 가능
}

3️⃣ 멀티캐스트 (Multicast) RPC

서버가 모든 클라이언트에 특정 함수 실행을 요청할 때 사용.

UFUNCTION(NetMulticast, Reliable)
void Multicast_PlayEffect();

void AMyCharacter::Multicast_PlayEffect_Implementation()
{
    // 모든 클라이언트에서 실행
}

🎮 Reliable vs Unreliable

언리얼 엔진의 RPC(Remote Procedure Call)에서 함수 호출 시, Reliable과 Unreliable을 선택할 수 있다.
네트워크 환경에서 성능과 신뢰성을 최적화하기 위해 이 두 가지를 적절히 사용하는 것이 중요.

1️⃣ Reliable(신뢰성 보장)

📌 개념

  • Reliable은 패킷이 반드시 도착하도록 보장.
  • 패킷이 손실되면 재전송(Retransmission) 을 수행한다.
  • 실행 순서(Ordering) 도 보장.

📌 특징

  • 보장된 전송 : 네트워크 패킷이 손실되면 다시 전송함
  • 순서 보장 : 같은 클라이언트에서 실행된 Reliable RPC는 순서를 유지함
  • 재전송 비용 : 손실된 패킷을 다시 보내므로 대역폭(Bandwidth) 소비가 많음
  • 지연 발생 가능 : 패킷 손실 시, 재전송을 기다려야 하므로 지연(Latency) 발생 가능

📌 사용 예제

Reliable을 사용해야 하는 경우:

  • 중요한 이벤트 (예: 플레이어 사망, 점수 업데이트)
  • 게임 규칙이 바뀌는 경우 (예: 라운드 시작, 미션 완료)
  • 게임 데이터 변경 (예: 인벤토리 변경)
📋 cpp
UFUNCTION(Server, Reliable, WithValidation)
void Server_HandlePlayerDeath();

🔥 위 함수는 서버에서 플레이어 사망 처리를 수행하는 RPC이며, 패킷이 손실되면 반드시 재전송되어야 하므로 Reliable을 사용.

2️⃣ Unreliable(신뢰성 미보장)

📌 개념

  • Unreliable은 패킷이 도착하는 것을 보장하지 않는다.
  • 패킷이 손실되더라도 다시 보내지 않음.
  • 순서도 보장되지 않음.

📌 특징

  • 빠름 : 재전송하지 않으므로 낮은 대기시간(Low Latency)
  • 대역폭 절약 : 패킷 손실 시 무시되므로, 네트워크 부하 감소
  • 손실 가능 : 일부 데이터가 유실될 가능성이 있음
  • 순서 보장 X : 같은 클라이언트에서 호출한 Unreliable RPC가 순서를 유지하지 않을 수도 있음

📌 사용 예제

Unreliable을 사용해야 하는 경우:

  • 자주 갱신되는 데이터 (예: 플레이어 위치, 애니메이션)
  • 손실되어도 게임에 큰 영향을 주지 않는 정보 (예: 효과음, 파티클)
  • 빠른 반응이 필요한 정보 (예: 탄환 이동, 카메라 흔들림)
UFUNCTION(NetMulticast, Unreliable)
void Multicast_PlayHitEffect();

🔥 위 함수는 총알이 벽에 맞을 때 효과를 재생하는 RPC이다. 패킷이 손실되더라도 다음 효과음이 곧 올 것이므로 Unreliable로 설정해 네트워크 부하를 줄임.

3️⃣ Reliable vs Unreliable 비교

4️⃣ Reliable vs Unreliable 사용 시 주의할 점

📌 Reliable을 과도하게 사용하면?

  • 모든 패킷이 재전송되므로 네트워크 대역폭을 많이 사용한다.
  • 패킷 손실이 많아질수록 지연(Latency)이 증가.
  • 빠른 액션 게임에서 중요한 이벤트가 지연되면 플레이어 경험이 나빠질 수 있음.

📌 Unreliable을 과도하게 사용하면?

  • 중요한 정보가 손실될 경우 게임 진행이 망가질 수 있음.
  • 예를 들어, Unreliable로 플레이어 사망 메시지를 보냈는데 패킷이 손실되면, 플레이어가 죽었는데도 계속 움직일 수 있는 버그가 발생할 수 있음.

5️⃣ 결론

  • 중요한 게임 이벤트 (죽음, 점수, 아이템 획득 등) Reliable
  • 빠르게 변하는 데이터 (플레이어 위치, 총알 발사, 이펙트 등) Unreliable
  • 자주 갱신되지만 중요한 데이터 (체력 변경, 능력치 변화 등) Reliable
  • 자주 갱신되지만 손실 가능 (애니메이션, 소리, 시각 효과 등) Unreliable

👉 Reliable은 중요한 데이터를 처리할 때 사용하되, 너무 많이 사용하면 성능 문제가 발생할 수 있음.
👉 Unreliable은 빠른 응답이 필요한 데이터에 적합하지만, 중요한 정보를 전송하는 데는 부적절함.
👉 적절한 조합을 사용해야 최적의 네트워크 성능을 유지할 수 있음.

profile
Unreal 1기

0개의 댓글

관련 채용 정보