언리얼 엔진 본캠프 15주차-3 언리얼 엔진 C++ : 네트워크 - 언리얼 네트워크

정재훈·2025년 3월 26일
0

unreal engine

목록 보기
35/45

언리얼 네트워크 접속

UNetDriver :

Unreal Engine의 네트워킹 시스템에서 네트워크 연결 전반을 관리하는 클래스

역할

  • 서버와 클라이언트 간의 연결 생성 및 유지
  • 데이터를 패킷으로 만들어서 전송하고, 받은 패킷을 해석
  • 리플리케이션을 통한 동기화 => 모든 클라이언트가 같은 게임 상태를 봄
  • 연결된 클라이언트 리스트 관리

주요 프로퍼티

  • ClientConnections : 서버일 경우, 연결된 클라이언트들을 나타냄
    • 서버에서는 접속한 클라이언트 하나당 하나의 UNetConnection을 가짐
  • ServerConnection : 클라이언트일 경우, 서버와의 연결을 나타냄
    • 클라이언트에서는 자신과 서버를 잇는 하나의 UNetConnection을 가짐

UNetConnection :

Unreal Engine의 네트워킹 시스템에서 서버와 클라이언트 사이에서 네트워크 연결을 담당하는 클래스

역할

  • 데이터 송수신 관리
    • 이 연결을 통해 패킷 주고받음
  • 데이터 전송 채널(Channel)들을 관리함
    • 각 액터/오브젝트가 독립된 채널로 통신
  • 레플리케이션 상태 유지 및 추적
    • 어떤 액터가 어떤 클라이언트에 복제됐는지 추적

주요 프로퍼티

  • Channels : 현재 이 연결을 통해 열려 있는 모든 채널
    • 각 채널은 하나의 네트워크 대상을 위한 것
      • UActorChannel : 액터
      • UControlChannel : 로그인/핸드셰이크 등의 제어 정보
      • UVoiceChannel : 음성 데이터
  • OwningActor : 이 연결의 대상(?), 주체(?)
    • 보통 PlayerController
  • State : 현재 연결 상태

⊃ : 왼쪽이 오른쪽을 소유
UNetDriverUNetConnectionPlayerControllerPawn


네트워크 접속

서버 네트워크 초기화
클라이언트 접속 흐름

클라 측 : UPendingNetGame
서버 측 : UWorld

  • client -> server : Hello message
  • server -> client : Challenge message
  • client -> server : Login message
  • server -> client : Welcome message
  • client -> server : Netspeed/Join message

액터와 그 접속 소유

액터 리플리케이션 흐름


Actor Role

이후로는 ChatGPT를 통해 얻은 정보로 확실한 게 아님. 다만 나중에 저런 걸 쓸 상황이 올 때 아래와 같은 내용으로 이해를 하고 접근해볼 수 있으니 가볍게 정리해본 것

SimulatedProxy vs AutonomousProxy

LocalRole과 IsLocallyControlled()

“Owner 없이 AutonomousProxy일 수 있나?”

✅ 핵심 개념

  1. AutonomousProxy는 서버에서 "너 이거 조종해"라고 설정
    • SetOwner(PlayerController) 또는 Possess() 호출
    • "최초 설정 시에는 반드시 Owner가 필요하다"
  1. 그런데 클라이언트에서 Actor가 [복제된 시점]에서는...
    • LocalRole == AutonomousProxy일 수 있음 (서버가 그걸로 복제했기 때문)
    • 하지만 아직 GetOwner()는 nullptr일 수 있음
    • 왜? Owner는 따로 리플리케이트되기 때문(즉, 아직 Owner 정보가 클라에 도착 안 했을 수도 있음)

🎯 요점:

  • ✅ AutonomousProxy가 되기 위해서는 서버 측에서 Owner가 반드시 필요하다.
  • ❗ 하지만 클라이언트에서 그 Owner가 아직 리플리케이트되지 않았을 수 있다.

=> "클라이언트에서 Owner 없이도 AutonomousProxy일 수 있다" → 이건 클라이언트 리플리케이션 타이밍에서 Owner가 도착 전일 수 있다는 뜻(정확히 말하면 "내부적으로는 Owner가 있어야 하고, 클라 입장에선 아직 그 정보가 안 왔을 수도 있다")

HasAuthority() : 서버인지
IsLocallyControlled() : 내가 조종 중인지
GetLocalRole() == ROLE_AutonomousProxy : 조종할 수 있는지
GetController()->IsLocalController() : 컨트롤러 기준 조종 여부







참고
1. https://designerd.tistory.com/entry/UE-Net-Actor-Connection-Handshaking

profile
드가자

0개의 댓글