UE5 31

[UE5] SetPawn() : OnPossess in Client

[ UE5 OnPossess in Client ] 간혹 게임이 처음 시작될 때, Controller가 Pawn을 소유한 직후, 그러니까 Controller와 Pawn이 둘 다 유효한 가장 처음 시점이 필요할 때가 있다.OnPossess(APawn* InPawn)라고 간편한 함수가 직접적으로 존재하지만, 이는 서버에서만 호출된다.클라이언트, 또는 클라이언트와 서버 둘 다 간편하게 Init 할 수있는 함수가 없을까? [ AController::SetPawn(APawn* InPawn) ]이 함수는 서버, 클라이언트로 부터 전부 호출된다.그리고 virtual로 선언되어 있어 잘 사용하면 서버, 클라이언트 양측 케이스를 한 번에 핸들링가능하다는 뜻이다.기본적으로 서버에서는 OnPossess(), 클라이언트에서는 ..

UE5/Network 2024.09.28

Conditional Property Replication에 관한 짧은 분석

[ 짧은 메모 ] RepLayOut.cpp - 1525 CommentMost replication conditions don't actually effect whether or not we compare properties, because we share comparisons across connections, and typically only want to do one comparison per frame for all connections, when possible.  This means that we will end up performing the comparison, ignoring replication conditions, even if we might not have to send the pr..

UE5/Network 2024.09.15

[UE5] Replication Graph Deep Dive

수집한 공식/비공식 자료를 임의로 해석 후 정리하고 있는 게시글이기에 정확성이 다소 떨어질 수 있습니다 [ Overview ]Replication Graph는 4.20에 공개되고 4.21에 출시된, 언리얼 멀티플레이를 위한 대규모 최적화 기능이다.Replication Graph의 필요성은 데디케이티드 서버의 한계에 달하는 100인을 목표로 출시된 게임들이 출시하고 흥행함에 따라 대두되었는데, 이것이 개발되기 전에는 각 게임 개발사에서 독자적으로 엔진을 수정하여 최적화하곤 했다.이후 언리얼엔진 개발사인 에픽게임즈에서도 포트나이트 배틀로얄이 흥행함에 따라 공식적인 대규모 최적화 방식을 개발하고 적용한 뒤에 Replication Graph를 공개했다.이름과 달리 C++로만 공식적으로 지원되며, 언급했듯이 포트..

UE5/Network 2024.08.29

Multiplayer in UE : How to Understand Network Replication

https://www.youtube.com/watch?v=JOJP0CvpB8w  Replication system은 3가지 중요한 클래스에 의존한다. 1) NetDriver2) NetConnection3) UChannel Server가 부팅되면 NetDriver를 생성하고, remote process들로 부터 message를 수신하기 시작한다. (remote process : client that doesn't have authority)Client가 부팅되면 또한 자체의 NetDirve를 생성하고, server에게 connection을 요청한다.  일단 Server와 Client의 NetDriver가 서로 연결되면, NetDriver간에 NetConnection을 형성한다.Server는 각각 연결된 R..

UE5/Network 2024.08.29

[UE5] About HUD After Seamless Travel

Seamless Travel이 일어난 이후 무슨 일이 일어나는가? 우선 Seamless Travel이 일어날 때, 새로운 GameMode가 AGameMode의 subclass이고, PlayerController 또한 이전과 같다면 PlayerConrtoller는 변화가 일어나지 않고 그대로 넘어오게 된다.만약 그렇지 않다면, GameMode(또는 GameModeBase)의 HandleSeamlessTravelPlayer() 내에서 새로운 PlayerController가 만들어진다.Seamless Travel이 일어난 이후, PlayerController가 이전과 다르다면 일부 주요 정보만 받아오는 SwapPlayerController()가 일어나게 된다. [ AGameMode.cpp : HandleSea..

UE5/Network 2024.08.22

[UE5] Replication - Push Model

Push Model이란 뭘까?언리얼의 Property Replication System은 기본적으로 Polling System이다.라이엇게임즈의 발로란트 최적화 과정에서 Replication의 Polling System에 관한 이야기가  나와있다.Unfortunately, it’s also pretty slow. It requires scanning through every variable marked as replicated every frame, then comparing it to each of the 10 clients’ last known states, and then packaging any deltas to send to the client. This is effectively random ..

UE5/Network 2024.07.31

[UE5] Widget Blueprint가 추가된 후 보이지 않음

[ TroubleShooting ]  추상적이라 구글링해도 답이 없는 문제.결론부터 말하자면 Widget Blueprint 최상위 Canvas Panel이 Visibility : Hidden으로 설정되어 있었음. 우선 동일한 상황에 놓였을 때 재연/해결하기 위해 해결과정을 기록하겠음.1. WBP를 C++에서 AddToViewport()이후에도 플레이시 보이지 않았다.2. AddToViewport() 정상 실행, UE_LOG로 확인했음.3. C++에서 github commit log를 통해 추적했을 때, 변경된 C++ 코드는 없었음.4. 보이지 않는 위젯 디버깅해서 C++상에서 추적. nullptr 아닌 것 확인함.5. NativeConstruct(), NativeDestruct(), NativeTick(..

UE5 2024.07.29

[UE5] Visibility for DragDropOperation

[ Trouble Shooting ] 동일한 Widget Blueprint내에 있는 별개의 Widget Blueprint들간에 DragDropOperation을 주고 받으려는데, NativeOnDrop()에서 DragDropOperation을 받지 못하고 있는 문제가 있었다.위젯 블루프린트가 처음 만들어지면 기본 Visibility는 Not Hit-Testable (Self Only)인데, 여기서 Hit-Test라는 말은 Cursor과 Interact할지의 여부이다. 한 위젯 블루프린트내에서 CreateWidget로 만들어진 위젯에서 생성된 DragDropOperation은 Visibility를 신경쓰지 않아도 됐는데, 같은 상위 위젯 블루프린트내에 바인드되어 있는 위젯 블루프린트간에는 체크를 해줘야 하..

UE5 2024.07.25

[UE5] Is casting expensive?

전투 시스템을 구현하는데 처음에는 ACharacter를 상속받은 주인공 Character 대상으로 공격 판정을 하다가,또 다른 ACharacter를 상속받은 Monster가 공격 판정 대상에 추가되었으며, 최근에는 AActor를 상속받은 Weapon까지 공격 판정에 추가되었다.그러다보니 공통되는 기능을 통합하여 코드 양을 줄임에 따라 상속과 캐스팅을 할 일이 많아졌는데,한가지 핵심 기능을 갖는 함수 하나를 중복 코드 없이 통합할 수 있는 대신, 캐스팅이 1-2회 늘어나는 Trade-Off 상황이 생겼다. 내가 언리얼 엔진 C++을 처음 배울 때만 해도 Cast는 비싼 연산이고, 가능하다면 최대한 줄이거나 최초 1회 실행시 가능한 캐싱하여 쓰도록 배웠는데, 이참에 캐스팅에 대해 Forum, Reddit, ..

UE5 2024.07.16