언리얼/이득우 네트워크 멀티플레이

    [이득우 네트워크 멀티플레이] 08. RPC 기초

    [이득우 네트워크 멀티플레이] 08. RPC 기초

    목표RPC의 기본 개념과 동작 원리를 이해하기언리얼 C++에서 다양한 RPC를 사용하는 방법을 학습하기프로퍼티 리플리케이션과 RPC와의 차이점 이해하기  RPC 기초RPC : Remote Procedure(함수) Call의 약자로 로컬에서 실행되지만 다른 머신에서 원격으로 호출되는 함수.서버와 클라이언트 간 빠르게 명령을 주고받는 데 사용한다.> 언리얼 엔진에서 클라이언트에서 서버로 통신하는 유일한 수단이다. RPC 주로 이펙트나 사운드 재생, 파티클 등 액터의 핵심적인 기능과는 무관한 비신뢰성 게임플레이 이벤트를 위해 사용된다. 언리얼에서 RPC 함수를 만드는 방법은 쉽다.UFUNCTION()에서 원하는 RPC에 해당하는 지정자를 설정해 주고 접미사로 _Implementation을 붙여주면 된다.예를 ..

    [이득우 네트워크 멀티플레이] 07. 우선권과 액터 리플리케이션 로우레벨 플로우

    [이득우 네트워크 멀티플레이] 07. 우선권과 액터 리플리케이션 로우레벨 플로우

    목표액터 리플리케이션의 우선권 개념과 동작 방식 이해하기액터의 휴먼 상태 설정과 활용 방법의 학습서버에서 액터 리플리케이션을 처리하는 전반적인 플로우의 이해 액터 리플리케이션의 우선권클라이언트에 보내는 대역폭은 물리적으로 한정되어 있다. 클라이언트에 보낼 액터 중, 우선권이 높은 액터의 데이터를 우선 전달하도록 설계되어 있다.액터에 설정된 NetPriority 우선권 값을 활용해 전송 순서를 결정한다. 예를 들어 NetPriority가 2.0인 액터는 1.0인 것보다 정확히 두 배의 빈도로 업데이트될 것 우선권에서 가장 중요한 것은 비율인데, 모든 우선권을 높인다고 언리얼의 네트워크 퍼포먼스가 향상되지 않는다. 액터의 현재 우선권은 GetNetPriority 가상 함수를 사용해 계산한다.이 함수는 액터와..

    [이득우 네트워크 멀티플레이] 06. 액터 리플리케이션 빈도와 연관성

    [이득우 네트워크 멀티플레이] 06. 액터 리플리케이션 빈도와 연관성

    액터 리플리케이션 빈도 설정 액터 리플리케이션의 빈도(Frequency)액터 리플리케이션의 빈도 : 클라이언트와 서버 간에 진행되는 통신 빈도NetUpdateFrequency : 1초당 몇 번 리플리케이션을 시도할지 지정한 최대치 값을 의미한다. 기본 값은 100이고이것은 서버는 최대 1/100초 간격으로 리플리케이션을 시도한단 것을 의미한다. 이때 최대치 값이라는 말처럼 네트워크 빈도는 최대치일 뿐 이를 보장하지 않는다. 즉 서버의 성능에 따라 빈도수가 낮을 수 있다. 이때 서버의 성능 때문에 네트워크 빈도수가 낮아질 경우, 서버의 성능으로 복제된다. 따라서 클라이언트로써 그래픽 처리를 해야 하는 리슨 서버보다그래픽 기능이 없는 데디케이티드 서버가 더 좋은 서버 성능을 발휘한다.네트워크 데이터 줄이기규..

    [이득우 네트워크 멀티플레이] 05. 액터 리플리케이션 기초

    [이득우 네트워크 멀티플레이] 05. 액터 리플리케이션 기초

    액터 리플리케이션의 동작 원리를 이해하고 프로퍼티 리플리케이션을 구현해 보자  액터 리플리케이션 기초액터 리플리케이션액터 리플리케이션 : 특정 플레이어에 속한 액터의 정보를 네트워크 내 다른 플레이어에게 복제하는 작업클라이언트-서버 모델에서는 대부분 서버에 Authority가 있기 때문에 서버에서 클라이언트로 전달한다. 리플리케이션의 방법에는 크게 두 가지가 있다.1. 프로퍼티 리플리케이션 : 속성 복제에 관련된 작업을 수행 2. RPC(Remote Procedure Call) : 함수 호출에 관련된 작업을 수행기본 액터의 로딩리플리케이션 작업에서 가장 중요한 것은 데이터 전송량을 최소화해서 서버 부하를 최소화하는 것이다. 이런 관점에서 클라이언트가 초기화될 때 모든 액터 정보를 서버로부터 받는 것을 비..

    [이득우 네트워크 멀티플레이] 04. 액터의 역할 커넥션 핸드셰이킹

    [이득우 네트워크 멀티플레이] 04. 액터의 역할 커넥션 핸드셰이킹

    목표1.네트워크 멀티플레이어 게임에서 서버와 클라이언트에 위치한 액터의 역할들을 이해하는 것2.클라이언트와 서버 간의 커넥션이 맺어지는 과정에 대해서 엔진 소스코드를 보면서 심층적으로 이해하는 것 액터의 역할우리가 네트워크로 멀티플레이어 게임을 만들면은 서버와 클라이언트 간의 다양한 액터가 존재하게 된다.이런 액터들은 신뢰할 수 있는가를 기준으로 Authority, Proxy로 구분할 수 있다. (Question : 신뢰 기준이 맞나?) Authority : 클라이언트-서버 모델에서는 항상 서버에 있는 신뢰되는 액터가 가지는 것 Proxy : 서버에서 클라이언트로 복제된 액터. Proxy(허상)이름 그대로 허상에 불과함.  클라이언트에 있는 액터는 대부분 서버 액터를 복제한 허상에 불과해 Authorit..

    [이득우 네트워크 멀티플레이]  03. 커넥션과 오너십

    [이득우 네트워크 멀티플레이] 03. 커넥션과 오너십

    목표1. 네트워크 멀티플레이어에서 원격 액터의 초기화 과정의 이해2. 로우 레벨에서 진행되는 네트워크 처리 방식의 이해3. 네트워크 멀티플레이어에서 사용하는 오너십 개념의 이해 원격 액터의 초기화 과정 로컬 게임을 제작하면서 액터를 초기화할 때 PostInitializeComponents 함수와 BeginPlay 함수를 사용했다.두 함수의 사용을 구분하는 기준은 초기화하려는 액터의 데이터가 게임플레이와 관련이 있는지 없는 지다. PostInitalizeComponents  :게임과 무관한 액터의 설정에 대해 초기화할 때 사용 BeginPlay :  초기화 대상이 현재 로딩된 레벨에서 게임 플레이와 관련돼있을 때 사용 BeginPlay함수는 GameMode의 StartPlay 함수를 통해 호출된다.(이전글..

    [이득우 네트워크 멀티플레이] 02. 게임 모드와 로그인

    [이득우 네트워크 멀티플레이] 02. 게임 모드와 로그인

    네트워크 모드, 서버 초기화, 클라이언트의 접속 플로우를 알아보겠다.  네트워크 모드Standalone : 로컬 머신에서 실행됨. 싱글 플레이 게임, 로컬 멀티플레이 게임에 적합하다.싱글&멀티 둘 다 가능한 게임은 싱글 플레이 상태에서 서버에 접속하면 Standalone 모드에서 Clinet 모드로 전환된다 DedicatedServer : 서버를 구동할 별도의 컴퓨터가 필요하며 게임에 참여하는 모든 플레이어가 네트워크 연결이 필요함.따라서 로컬 플레이어가 존재하지 않는다. DedicatedServer은 신뢰성 있는 서버를 제공하기 때문에 데이터 변조가 일어나면 치명적인 온라인 서비스 게임에 적합하다. ListenServer : 클라이언트가 서버 역할을 맡는다. 따라서 서버를 호스트 하는 로컬 머신도 게임..

    [이득우 네트워크 멀티플레이] 01. 언리얼 네트워크 프레임워크 개요

    [이득우 네트워크 멀티플레이] 01. 언리얼 네트워크 프레임워크 개요

    에디터 설정Late Join 버튼 활성화Editor Preferences - Allow late joining 체크  Late Join 버튼을 이용하면 특정 시점 클라 접속을 확인할 수 있어서 좋을 것 같다.언리얼에서 네트워크 상태로 게임에 접속하는 또 다른 방법은 Net Mode - Play as Listen or Client인데 Net Mode  기능을 이용하면 모든 클라이언트가 동시에 서버에 접속하기 때문에추가적인 클라이언트 난입 테스트를 체크하기 어렵다 만약 자신이 만드는  게임이 MMORPG류면 Late Join은 유용한 기능일 듯    네트워크 오버뷰언리얼 네트워크 도큐먼트 : Networking Overview for Unreal Engine | Unreal Engine 5.4 Documen..