전체 글 55

NetUpdateFrequency와 네트워크 복제 최적화

언리얼 멀티플레이에서는 서버가 모든 Actor의 상태를 매 프레임 무조건 클라이언트에 전송하는 것이 아니다.Actor마다 얼마나 자주 네트워크 복제를 시도할 것인지를 지정할 수 있는데, 이때 사용하는 속성이 NetUpdateFrequency다.NetUpdateFrequencyNetUpdateFrequency는 Actor가 1초에 최대 몇 번 Replication을 시도할 것인지를 나타내는 값이다.예를 들어NetUpdateFrequency = 100.0f;이라면 이론적으로는1초 / 100회= 약 0.01초 간격으로 Replication을 시도할 수 있다는 의미다.NetUpdateFrequency = 1001초│├─ 0.01초├─ 0.01초├─ 0.01초├─ 0.01초└─ ...하지만 여기서 중요한 점이 있..

Pawn의 소유권 설정과 NetConnection 연결 구조

언리얼 멀티플레이에서 Owner 설정은 매우 중요하다.단순히 "이 액터를 누가 소유하고 있는가"를 나타내는 용도만이 아니라, 해당 액터가 어떤 클라이언트의 NetConnection에 연결되는지 판단하는 기준으로 사용되기 때문이다.특히 Pawn은 Controller에 의해 Possess될 때 Owner가 설정되고, Possess가 해제될 때 Owner도 제거된다.APawn::PossessedBy()Pawn이 어떤 Controller에 의해 Possess될 때 다음 함수가 호출된다.void APawn::PossessedBy(AController* NewController){ SetOwner(NewController); ...}여기서 가장 중요한 부분은 다음 코드다.SetOwner(NewContro..

언리얼 엔진의 게임 시작 및 액터 초기화 주요 이벤트 함수

언리얼 엔진에서 액터가 생성되고 실제 게임 플레이를 시작하기까지 여러 초기화 함수가 순서대로 호출된다.대표적으로 다음 함수들을 알아두면 액터의 생성과 네트워크 초기화, 게임 시작 흐름을 이해하기 쉽다.PostInitializeComponents()PostNetInit()StartPlay()BeginPlay()이 함수들은 비슷하게 "시작할 때 호출되는 함수"처럼 보이지만 역할과 호출 대상이 서로 다르다.PostInitializeComponents()AActor::PostInitializeComponents()PostInitializeComponents()는 액터가 가지고 있는 컴포넌트들의 초기화가 완료된 뒤 호출되는 함수다.예를 들어 Actor가 다음과 같은 컴포넌트를 가지고 있다고 하자.Character..

AActor::BeginPlay()의 서버·클라이언트 호출 흐름

언리얼 엔진에서 게임이 시작되면 각 액터의 BeginPlay()가 호출된다.멀티플레이 환경에서는 서버와 클라이언트가 각각 자신의 World에 존재하는 액터들의 BeginPlay()를 호출해야 한다.이때 AGameStateBase의 bReplicatedHasBegunPlay 값이 서버와 클라이언트의 게임 시작 시점을 맞추는 역할을 한다.AGameStateBase의 bReplicatedHasBegunPlayAGameStateBase에는 다음과 같은 변수가 존재한다.UPROPERTY(Transient, ReplicatedUsing = OnRep_ReplicatedHasBegunPlay)bool bReplicatedHasBegunPlay;이 변수는 GameModeBase::StartPlay()가 호출되어 게임이..

언리얼 네트워크의 데이터 전송 구조

언리얼 엔진의 멀티플레이 네트워크에서는 데이터를 단순히 한 번에 보내는 것이 아니라, 여러 계층을 거쳐 정리한 뒤 네트워크로 전송한다.전체적인 관계는 다음과 같이 볼 수 있다.NetConnection ↓Channel ↓Bunch ↓Packet ↓Network각 요소는 서로 역할이 다르며, 특히 NetConnection, Channel, Bunch, Packet의 관계를 이해하면 언리얼의 Actor Replication과 RPC가 실제로 어떤 방식으로 전송되는지 이해하기 쉬워진다.NetConnectionNetConnection은 서버와 클라이언트 사이의 네트워크 연결 자체를 표현하는 객체다.쉽게 말하면 멀티플레이에서 데이터가 오가는 하나의 통신 통로라고 볼 수 있다.서버의 NetCon..

클라이언트 접속 과정에서의 NetConnection 확인과 로그인 흐름

언리얼 멀티플레이에서 클라이언트가 서버에 접속하면 서버와 클라이언트 양쪽에 각각 NetConnection 객체가 생성된다.서버 입장에서 클라이언트와의 연결 → ClientConnection클라이언트 입장에서 서버와의 연결 → ServerConnection이번에는 클라이언트 접속 과정에서 각 NetConnection을 어느 시점에 확인하면 좋은지, 그리고 플레이어의 접속을 막으려면 어떤 함수를 사용해야 하는지 정리한다.서버에서 ClientConnection 확인클라이언트 접속 후 서버 측에서 생성된 ClientConnection을 살펴보기 좋은 함수는 다음과 같다.AGameModeBase::PostLogin()PostLogin()은 플레이어의 로그인이 성공적으로 완료된 이후 호출되는 함수다.또한 GameM..

Unreal Engine Property Replication 정리

1. Property Replication이란?Property Replication은 서버가 가지고 있는 변수의 상태를 클라이언트에 동기화하는 기능이다.Server의 변수 값→ 네트워크를 통해 전송→ Client의 같은 변수에 적용예를 들어 서버에서 플레이어의 체력이 100에서 70으로 변경되었다면, 복제된 체력 변수도 클라이언트에서 70으로 갱신된다.Server Health: 100 → 70 │ ▼Client Health: 100 → 70언리얼의 프로퍼티 복제는 기본적으로 서버에서 클라이언트 방향으로만 이루어진다. 클라이언트가 복제 변수의 값을 변경해도 그 값이 서버나 다른 클라이언트로 전송되지는 않는다.2. Property Replicati..

카테고리 없음 2026.08.06

RPC의 Call과 Invoke

RPC를 이해할 때 자주 등장하는 표현이 Call과 Invoke이다.두 단어 모두 한국어로는 흔히 호출하다라고 번역되지만, RPC에서는 다음과 같이 구분해서 이해하는 것이 좋다.Call→ 함수를 실행해 달라고 요청하는 행위Invoke→ 요청을 받은 위치에서 함수가 실제로 실행되는 것일반 함수에서는 Call과 Invoke가 거의 동시에 같은 컴퓨터에서 발생한다.하지만 RPC에서는 호출하는 컴퓨터와 실제로 실행하는 컴퓨터가 다를 수 있다.언리얼의 RPC도 한 머신에서 함수를 호출하면 네트워크를 통해 다른 머신에서 함수가 실행되는 구조다.1. Call이란?Call은 코드에서 함수를 부르는 행위를 의미한다.ServerRPCAttack();위 코드를 실행한 컴퓨터가 이 함수를 Call한 컴퓨터, 즉 호출자다.예를..

Unreal Engine RPC 정리

1. RPC란?RPC는 Remote Procedure Call의 약자로, 네트워크로 연결된 다른 컴퓨터에서 함수를 실행하도록 요청하는 기능이다.멀티플레이 게임에서는 서버와 클라이언트가 각각 독립적으로 게임을 실행하고 있기 때문에, 한쪽에서 함수를 호출했다고 해서 다른 쪽에서도 자동으로 실행되지는 않는다.예를 들어 클라이언트에서 공격 버튼을 눌렀을 때 다음과 같은 흐름이 필요하다.클라이언트→ 공격 입력→ Server RPC 호출→ 서버에서 공격 판정→ Net Multicast RPC 호출→ 모든 클라이언트에서 공격 연출 재생즉, RPC는 서버와 클라이언트 사이에서 함수 실행 요청을 전달하는 기능이다.2. RPC의 종류언리얼의 RPC는 크게 세 가지가 있다.Server RPCClient RPCNet Mult..

Unreal Network Role 이해를 위한 예시

NetRole에 대한 설명 https://codeghost.tistory.com/45 Unreal Network Role 정리Authority와 Proxy언리얼 멀티플레이에서는 같은 액터가 서버와 클라이언트에 각각 존재할 수 있다.서버└─ 액터 원본클라이언트└─ 서버 액터의 복제본서버에 존재하는 액터 원본은 일반적으로codeghost.tistory.com Network Role은 클라이언트와 서버 사이에서 보면 어렵고 액터가 서버에 있는지 클라이언트에 있는지 생각하면 편하다. 서버는 기본적으로 액터를 소유한다면 Authority로 가진다는 것을 알고 있다면 더욱 이해하기 쉽다. 플레이어 A의 캐릭터 원본은 서버에 존재한다.서버는 이 캐릭터의 실제 체력, 위치, 공격 결과와 같은 중요한 상태를 최종적으..