< '언리얼엔진5/[Part3] 이득우의 언리얼 프로그래밍' 카테고리의 글 목록

언리얼엔진5/[Part3] 이득우의 언리얼 프로그래밍 14

[이득우의 언리얼 프로그래밍 Part3 필기] 12. 물리 움직임 리플리케이션

캐릭터 리플리케이션 -> RPC 사용액터 리플리케이션은 프로퍼티 리플리케이션을 사용한다.   [언리얼엔진 5 공식문서] Networked Movement in the Character Movement Component캐릭터 무브먼트 컴포넌트는 걷기, 낙하, 수영, 비행 등 휴머노이드 캐릭터의 일반적인 이동 모드가 포함된 캡슐화된 이동 시스템을 제공하는 액터 컴포넌트입니다. 캐릭터 무브plug-in-baby.tistory.com  움직임 리플리케이션을 위한 서버의 준비 [ReplicatedMovement] 서버에서 SimulatedProxy로 보내는 움직임 정보를 기록한 멤버 변수OnRep_ReplicatedMovement 로 이벤트 함수 호출함일반 움직임 물리 움직임의 리플리케이션을 모두 처리하는 용도로..

[이득우의 언리얼 프로그래밍 Part3 필기] 11. 움직임 리플리케이션

공식 문서 Understanding Networked Movement In The Character Movement Component For Unreal Engine | Unreal Engine 5.4 Documentation | EpicDetailed explanation of how the Character Movement Component handles networked movementdev.epicgames.com 해석본 일부 [언리얼엔진 5 공식문서] Networked Movement in the Character Movement Component캐릭터 무브먼트 컴포넌트는 걷기, 낙하, 수영, 비행 등 휴머노이드 캐릭터의 일반적인 이동 모드가 포함된 캡슐화된 이동 시스템을 제공하는 액터 컴포넌트..

[이득우의 언리얼 프로그래밍 Part3 필기] 10. 캐릭터 공격 구현 개선

패킷 렉이 생길 때 입력이 서버로 전달되는 과정에서 시간이 오래 소요서버에서 클라이언트로 전달되는 과정에서 또 소요애니메이션이 재생되지 않고 대기하는 시간이 길어짐      당연하게도 서버와 클라이언트의 시간은 차이가 나게 된다. 따라서GetWorld()->GetTimeSeconds() 대신 GetWorld->GetGameState()->GetServerWorldTimeSeconds() 를 사용해야 서버의 시간을 이용해 판정을 할 수 있다. 최적화FVector_NetQuantize 데이터를 전달할 때 벡터 구조체를 전달하는데, 벡터의 경우에는 float 세개로 구성되어있기 떄문에 12바이트(32, 32, 32)를 차지한다. 따라서 높은 정밀도가 필요하지 않은 경우에는 작은 사이즈로 압축해서 보낸다.이를 ..

[이득우의 언리얼 프로그래밍 Part3 필기] 9. 캐릭터 공격 구현

캐릭터의 공격 플로우   네트웍 멀티플레이의 구현을 위한 4원칙 ++)3. 중요한 정보 -> 클라이언트가 재접속한 상황에서 접속이 끊어지지 않은 것처럼 진행이 되어야 함. 이때 필요한 데이터들이 중요한 데이터들이다. 4. 가급적이면 멀티캐스트보다 Client RPC 를 사용해라  네트웍 멀티플레이을 위한 공격 기능 구현 기획  C++ 에서 프로퍼티 리플리케이션의 이벤트 함수를 사용하는 경우에는 클라이언트에서만 호출되고 서버에선 자동으로 호출되지 않기 때문에 서버 로직의 경우 명시적으로 함수를  호출 해주어야 한다. (서버에서 프로퍼티가 변경됌 -> 연결된 클라이언트들에게 프로퍼티 리플리케이션 됌 -> 서버에서는 해당 함수의 로직이 실행 안됌 -> 따라서 서버 또한 같은 로직을 구현해 주기 위해선 명시적으..

[이득우의 언리얼 프로그래밍 Part3 필기] 8. RPC 기초

RPC(Remote Procedure Call) 이란?원격 프로시저(함수) 호출의 약자원격 컴퓨터이 있는 함수르 호출할 수 있도록 만든 통신 프로토콜네트웍 멀티플레이에서 서버와 클라이언트간에 빠르게 행동을 명령하고 정보를 주고받는 데 사용언리얼 엔진에서 클라이언트에서 서버로 통신하는 유일한 수단을 제공한다.  ++)오너십을 가지는 액터의 경우 클라이언트에서 서버로 명령을 내릴 수도 있음  https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/RPCs/ RPC네트워크를 통한 함수 리플리케이션 지정하기 입니다.docs.unrealengine.com Client RPC 개요서버에서 클라이언트로 호출하는 RPC이를 활용해 특..

[이득우의 언리얼 프로그래밍 Part3 필기] 7. 액터 리플리케이션 로우레벨 플로우

우선권이란?   우선권을 설정할 때 대역폭보다 커서 전송하지 못한 후순위의 액터를 다음 틱에서 전송할 방법이 필요한데 그것이 우선권 설정이다. 우선권 설정 로직   액터의 휴면 이란?  flushnetdormancy() 함수를 통해 휴면 해제가 가능하다. 네트웍 트래픽 포화(Saturation) 예시  위와 같이 우선순위가 밀려 전송되지 못한 패킷은 다음 틱에 전송된다.  액터 리플리케이션의 흐름   액터 리플리케이션을 진행할 때 가장 먼저 진행되는 것이 네트워크로 업데이트할 액터의 목록이다.서버가 매 틱마다 이들을 클라이언트로 전송하는데 각 액터의 정보는 FNetWorkObjectInfo 라고 하는 구조체에 정리가 되어 있다. (대표적 필드: 다음 전송 시간을 나타내는NextUpdateTime, bPe..

[이득우의 언리얼 프로그래밍 Part3 필기] 6. 액터 리플리케이션 빈도와 연관성

언리얼 인사이트 언리얼 프로그램의 다양한 퍼포먼스를 체크할 수 있는 강력한 프로파일링 도구언리얼 엔진에 포함되어 있음프로그램 프로파일링 뿐만 아니라 네트웍 상태도 확인할 수 있다.   액터 리플리케이션의 빈도   주요 액터에 설정된 빈도 값   네트웍 데이터 줄이기규칙적으로 움직이는 액터의 네트웍 통신 데이터를 줄이는 예제NetUpdateFrequency 속성 값을 1로 설정데이터 공백을 클라이언트에서 부드러운 움직임으로 보완하기이전 복제된 데이터에 기반해 현재 틱에서의 회전 값을 예측클라이언트에서 예측된 값을 보간해 회전   ABFountain 의 소스 코드 // Called every framevoid AABFountain::Tick(float DeltaTime){ Super::Tick(DeltaTi..

[이득우의 언리얼 프로그래밍 Part3 필기] 5. 액터 리플리케이션 기초

액터 리플리케이션특정 플레이어에 속한 액터의 정보를 네트웍 내 다른 플레이어에게 복제하는 작업클라이언트 - 서버 모델에서는 대부분 서버에서 클라이언트로 전달함.리플리케이션의 방법에는 크게 두 가지가 있음.1. 프로퍼티 리플리케이션2. RPC (Remote Procedure Call)   기본 액터의 로딩클라이언트가 초기화 될 떄 모든 액터 정보를 서버로부터 받는 것은 비효율적따라서 기본 배경에 관련된 액터는 맵을 통해 스스로 로딩하도록 설계되어 있음.고정으로 제공하는 액터와 동적으로 생성하는 액터고정으로 제공하는 액터의 예 : 레벨을 구성하는 배경 액터동적으로 생성하는 액터의 예 : 플레이어 컨트롤러와 폰고정 액터에 대해 NetLoadOnClient속성을 체크해야 함 (기본값)   리플리케이션 작업에서 ..