본문 바로가기
움직임 리플리케이션 플로우 & Simulated Proxy 리플리케이션 - Unreal Network MultiPlayer Framework Simulated Proxy & 움직임 리플리케이션을 사용하기 위해선Actor의 움직임 리플리케이션 옵션을 활성화해야 올바르게 동작한다.Actor 움직임 리플리케이션 플로우서버에서 움직임 리플리케이션 옵션을 활성화매 Tick마다 현재 Actor의 움직이나 물리 상태를 ReplicatedMovement라는 멤버 변수에 저장ReplicatedMovement라는 멤버 변수를 클라이언트의 SimulatedProxy에 전송OnRep_ReplicatedMovement함수 호출클라이언트의 움직임이나 물리상태를 기록한다.클라이언트는 Tick마다 물리 & 움직임 처리를 진행한다.물리가 활성화되어있다면 물리 리플리케이션 Tick에서 클라이언트와 서버에 물리상태를 동기화캐릭터는 CharacterMovement의 매 Tick.. 2025. 3. 11.
움직임 리플리케이션 & 디버깅- Unreal Network MultiPlayer Framework 더보기https://dev.epicgames.com/documentation/ko-kr/unreal-engine/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine오늘 글과 관련된 Unreal 공식 문서이다.캐릭터 움직임 리플리케이션 플로우(Chracter Movement Component에 구현되어 있음)클라이언트에서 움직임 입력 명령현재 Tick에서 입력 가속(입력을 가속도로 변환)과 움직이기 전의 캐릭터를 클래스에 기록한다.입력 가속은 이동 모드와 입력 변수를 기반으로 계산된다.Character Movement의 함수인 PerformMovement 실행Chracter Movement에 설정한 속성.. 2025. 3. 11.
네트워크 공격 기능 개선 & 최적화 - Unreal Network MultiPlayer Framework 이전 글 처럼 공격 로직을 만들면 별 문제가 없어 보이고 에디터에서 정상적으로 동작했다.하지만 통신 부하가 발생하는 경우에는 문제가 발생할 수 있다. 통신 렉이 심한 경우 공격 모션이 늦게 재생되거나 시각적인 타이밍과 클라이언트와 서버가 일치하지 않을 수 있다.이를 확인하기 위해 DefaultEngine.ini에 다음과 같이 추가해준다.이렇게 작성하면 500ms. 즉, 0.5초 딜레이를 가지고 패킷을 전송한다.이동만 해도 다음처럼 이동에 사용되는 패킷이 유효하지 않다는 경고 로그를 찍고 한박자 느리게 움직인다.Attack을 해봐도 서버보다 클라이언에서 한박자 느리게 움직인다.이렇게 타이밍이 맞지 않으면 플레이 경험적으로 좋지 않다. 이러한 현상이 발생하는 원인의 순서는 다음과 같다.클라이언트에서 Atta.. 2025. 3. 11.
공격 기능 & Damage예제 / 액터 컴포넌트 리플리케이션- Unreal Network MultiPlayer Framework Attack 기능은 기본적으로 제작되었다는 가정 하에 Network 흐름을 연습하기 위한 예제이다.h 파일에 Lifetime을 위한 GetLifetimeReplicatedProps와 Server, MulticastRPC를 만들어준다.그리고 bCanAttack을 콜백함수로 구현하기 위해 ReplicatedUsing을 사용하고 OnRep_CanAttack()함수를 만들어준다.Attack은 Attack을 수행하는 함수이고 AttackHitCheck는 Attack시 다른 캐릭터가 맞았는지 체크하는 함수이다.GetLifetimeReplicatedProps에 bCanAttack 네트워크를 통해 통신하기 위해서 DOREPLIFETIME 매크로를 통해 등록해준다.bCanAttack이 true라면 클라이언트에서 Serv.. 2025. 3. 10.
RPC 개요 및 주의사항 - Unreal Network MultiPlayer Framework RPC (Remote Procedure Call, 원격 프로시저(함수) 호출)https://dev.epicgames.com/documentation/ko-kr/unreal-engine/remote-procedure-calls-in-unreal-engine?application_version=5.4원격 컴퓨터에 있는 함수를 호출할 수 있도록 만든 통신 프로토콜 (로컬 호출, 원격 실행)네트워크 멀티플레이에서서버와 클라이언트 간 빠르게 행동을 명령하고 정보를 주고받는데 사용Unreal Engine에서 클라이언트에서 서버로 통신하는 유일한 수단을 제공서버에서 클라이언트로 전파되는 방향성을 가지며 클라이언트에서 커넥션을 소유하는 Actor는 서버로 명령을 내릴 수 있다.Sound, Particle, Actor의.. 2025. 3. 9.
Actor 우선권 & 휴면 / 조건식 프로퍼티 리플리케이션 / 액터 리플리케이션 로우레벨 - Unreal Network MultiPlayer Framework 액터 리플리케이션 우선권클라리언트에 보내는 대역폭(NetBandwidth)는 물리적으로 한정되어있다.클라이언트에 보낼 Actor 중, 우선권이 높은 Actor의 데이터를 우선 전달하도록 설계가 되어있다.Actor에 설정된 NetPriority 우선권 값을 활용해 전송 순서를 결정한다. (값이 높으면 우선권이 높다)우선권은 네트워크로 전송하는 비율을 높이는 것이 아니라 우선권을 높히거나 낮춰서 네트워크 성능이 향상되진 않는다.Actor 종류우선권(NetPriority)일반적인 Actor1.0Pawn3.0PlayerController3.0 Actor의 현재 우선권은 GetNetPriority()함수를 사용해서 계산한다.이 GetNetPriority함수도 연관성과 동일하 Actor와 관찰자 사이의 거리와 상대.. 2025. 3. 9.
Actor Replication Frequence & Relevancy - Unreal Network MultiPlayer Framework 액터 리플리케이션 빈도( Actor Replication Frequence)클라이언트와 서버간의 진행되는 통신 빈도를 의미한다.NetUpdateFrequency 1초당 몇번 리플리케이션을 시도할지 지정한 값 (가능한 최소화하는 것이 성능에 좋음)값이 100이라는 의미는 서버가 이론적으로 1/100초 간격으로 리플리케이션을 시도한다는 뜻이다. (무조건 보장하진 않음)네트워크 빈도는 최대치일 뿐 이를 보장하진 않음서버의 Tick Rate에 따라 리플리케이션이 발생하지만 서버의 성능에 따라 달라진다.서버의 성능이 네트워크 빈도보다 낮을 경우 서버의 성능으로 복제된다.(NetUpdateFrequency가 100으로 설정되어있을 때 서버의 Tick이 50번 밖에 수행이 되지 않는다면 50번 리플리케이션이 발생함... 2025. 3. 8.
Actor & Property Replication, Replication Callback Function - Unreal Network MultiPlayer Framework Actor Replication (액터 리플리케이션)특정 플레이어에 속한 정보를 네트워크 내 다른 플레이어에게 복제하는 작업이다. (동기화)클라이언트 - 서버 모델에서는 대부분 서버에서 클라이언트로 전달한다. 리플리케이션의 방법프로퍼티 리플리케이션 : Actor가 가진 속성 값을 복제한다.RPC(Remote Procedure Call) : 함수를 호출하는 역할을 한다. (예전엔 함수 리플리케이션으로 부름)기본 Actor의 로딩클라이언트가 초기화 될 때 모든 Actor의 정보를 서버로부터 받는 것은 데이터양이 너무 많아 비효율적이다.따라서 기본 배경과 관련된 Actor는 맵을 통해 스스로 로딩하도록 설계되어있다.이 말은 서버와 클라이언트가 가지고 있는 배경 파일에 유효성 검사만 진행하고 서버로부터 배경 데.. 2025. 3. 7.
Network에서의 Actor, Connection Handshaking(클라이언트 접속 및 게임 시작 과정) - Unreal Network MultiPlayer Framework 서버와 클라이언트에 위치한 Actor의 역할클라이언트 - 서버 모델에서 항상 서버에 있는 Actor만 신뢰된다. 이를 Authority를 가진다고 표현.클라이언트의 Actor는 대부분 서버 Actor를 복제한 허상이다. 이러한 Actor를 Proxy라고 한다.이를 구분하기 위해서 현재 동작하는 어플레케이션(게임)에서의 역할을 로컬 역할(Local Role), 커넥션으로 연결된 어플리케이션에서 역할을 리모드 역할(Remote Role)이라고 한다. 리슨 서버의 경우 서버 또한 Player로서 게임에 참가하므로 어플리케이션(게임)의 게임 로직을 사용한다.그렇다면 서버의 어플리케이션에서 Player가 존재하고 클라이언트가 추가되면 해당 클라이언트에서도 어플리케이션이 실행된다.그럼 A는 서버의 Player, B.. 2025. 3. 7.