UE5 31

애니메이션 리타겟팅 루트모션관련 에러

[ TroubleShooting ]애니메이션을 리타겟팅한 뒤, 포함된 루트모션이 제거된 채로 리타겟될 때 해결법1) Target의 Skeleton 에셋에서, Translation Retargeting Options (톱니바퀴 모양) 를 킨 다음 root를 "Animation"으로,  pelvis를 "Animation Relative"으로, 그 외의 bone들을 "Animation"으로 설정 2) Retargeter(RTG)의 Chain Mapping (우측 하단)에서 root의 translation mode를 "Globally Scaled"로 변경, 그리고 pelvis를 "Absolute"로 변경=> 필자는 pelvis가 없어 하지 않아도 정상작동 했다. 그런 다음 Retargeter(RTG)에서 Sou..

UE5 2024.07.12

Listen Server에서 DestroySession()에 관한 궁금증

Listen Server에서 Host가 DestroySession()을 하면 Client는 어떻게 될까?반대로 Client가 나갈려면 DestroySession()을 하는 것인가? Client가 DestroySession()을 호출하는 것이 말이 되는가? Session이라 함은 서버 관점의 개념이라 많이 헷갈린다. 레딧의 한 답변은,일단 기본적으로 진행중인 게임세션에서 나갈려면 Local Machine마다 DestroySession()을 호출해줘야 한다.클라이언트 프로그래머의 관점에서 Session은 서버를 포함한 모든 Machine에서 독립적으로 존재하고, Host로부터 복사된 것까지 Session이라고 칭하기 때문이다.Host가 Session을 파괴하면 Client는 그 사실을 알지 못해 그 위치에서..

UE5/Network 2024.07.05

[UE5] Package Build에 Asset 경로 포함

[ TroubleShooting ]PIE에서 정상작동하던 기능이 패키지 빌드에서 실행되지 않아 로그로 추적하던 중,런타임에 LoadObject()를 통해 약참조로 에셋을 올리던 부분에서 nullptr을 뱉는 것을 확인했다.패키징시 게임내에서 레퍼런스되는 에셋은 자동으로 추가되는데, 누락됐기 때문 해결방법은 [ Project Settings ] - [ Packaging ] - [ Advanced ] - [ Additional Asset Directories to Cook ] 에서 해당 에셋이 포함된 폴더 경로를 추가해준다. 그리고 비슷한 원인으로 Map 또한 패키지 빌드에서 존재하지 않을 경우 실행되지 않을 수 있으므로패키지할 때 마다 확인해서 사용되는 맵들을 수동으로 추가해주자.   Reference :..

UE5 2024.07.03

[UE5] Controller in BeginPlay on Server

[TroubleShooting] : Controller is nullptr in ACharacter::BeginPlay if HasAuthority() ACharacter::BeginPlay()에서 서버가 컨트롤하고 있는 Controller가 nullptr인 현상Server가 아닌 Owning Client에서는 유효하나, Server에선 초기 세팅하는 함수들이 많아서 그런지 BeginPlay() 이전에 Possess되지 않는 것 같음해결법은 PlayerController의 OnPossess()를 override해서 해당하는 서버측 로직을 추가로 수행OnPossess()는 server에서만 실행되므로(Server Only) 잘 맞음.

UE5/Network 2024.07.03

Multiplayer Best Practices in UE #NotGDC

NotGDC 2022에서 Omid Kiarostami의 Multiplayer Best Practices in Unreal Engine을 듣고 요약한 필기영어 강의를 듣고 이해한걸 필기해서 옮겼기 때문에 몇몇 개념은 부정확할 수 있다.특히 Serialization은 듣기만 하다 처음 알게됐는데 추후에 기초 개념을 다지고와서 다시 필기를 수정해야 할 것 같다.그래도 기본적인 내부 작동 방식은 많이 배운듯. https://youtu.be/UstLLZbkmOQ?si=yS4AjoZWyhAaP3C7  [ Networking Primer ]4가지 분류 A : Ordered, Unordered B : Reliable, Unreliable(ex)UDP : Unordered, Unreliable TCP : Ordered,..

UE5/Network 2024.05.07

[UE5] LineTraceMultiByChannel

bool LineTraceMultiByChannel ( TArray& OutHits, const FVector & Start, const FVector & End, ECollisionChannel TraceChannel, const FCollisionQueryParams & Params, const FCollisionResponseParams & ResponseParam ) const LineTrace로 1개이상을 감지할 때 사용. 주의해야 할점은 return값인 bool이 최종적으로 "Block" 되었으냐의 유무다. 그러니까 광선을 쏴서 Collision이 Overlap인 대상을 만난다면 FHitResult로 TArray에 추가되어 Trace가 "계속" 진행되는데, Collision이 Block인 대상..

UE5 2024.04.05

[UE5] OnComponentOverlap Vs OnComponentHit

기존 On Component Begin Overlap으로 무기에 충돌체를 둘러 공격판정을 하고 있었는데 이전에도 충돌 정보를 못얻어온다는걸 알았지만 놔뒀다가 결국 충돌 정보가 필요해져 온갖 구글링 + 유튜브 튜토리얼을 뒤져서 방법을 알아내긴했다... 결론부터 말하자면 정교한 물리 시뮬레이션으로 무기 판정을 할려면 On Component Begin Overlap 또는 Tick마다 Trace를 수행해야 하는데 구글링에서 나온 곳 모두 Overlap 방식을 추천하진 않았다. 서버에서 Tick() 마다 Trace를 수행해서 감지한 애들을 가져다가 처리해야 할거 같다. 1) On Component Overlap 충돌 유무를 가장 쉽게 확인가능하나, **충돌 정보를 얻을 수가 없다. -> 사용해보면 충돌한 Acto..

UE5 2024.04.04

[NDC2019] 카트라이더 Client-Simulated Model 강연 필기

강의 영상을 보고 카트라이더:드리프트가 언리얼 데디케이티드 서버 기반이라는 걸 알았다.영상의 대략 핵심 내용은 글로벌 서버에서 플레이하는 네트워크 게임 특성상플레이어(나)는 항상 상대방의 과거의 위치를 볼 수 밖에 없는데,레이싱 게임의 경우 항상 도착점을 향해 일정한 방향으로 달릴거라는 "기대"를 할 수 있으니이를 기반으로 클라이언트내에서 서버로 부터 받은 상대방의 위치를 핑차이 만큼 보정하여 미래의 위치를 추측한다는 것이다. 이 강연에 해당하는 구현부는 프로토타입이고, 100ms 이상 High Ping 상황에서 카트의 드리프트 경로를 서버의 상태와 더 정확히 동기화하기 위해 시계열 예측을 사용하는 후속 강연이 NDC에 추가로 공개되어 있다.  https://youtu.be/r4ZaolMQOzE?si=w..

UE5/Network 2024.04.03

UE5 Garbage Collection 개요

언리얼엔진5에서는 C#의 Attribute와 Reflection을 C++로 구현할려고 굉장히 노력을 많이 해놨다.-> C#의 Reflection을 모방해놨다.UE5에서 메모리관리가 되는 가장 최소한의 단위는 UObject이다.레벨에 배치되는 최소한의 단위인 Actor도 UObject를 상속받은 구조다UE5 내부에선 고전적인 new delete 방식이 아니라 언리얼이 제공하는 메모리 방식으로 관리한다.-> Garbage Collector 여기서 C++과 C#의 메모리 관리방식부터 이해해야 한다.C++ : 스마트 포인터 대표적인 Shared Pointer를 얘기하자면, reference count를 이용해서 어떤 객체가 있을 때그 객체가 몇 번 참조가 되고 있는지를 기록 한다.count를 기반으로 관리 (c..

UE5 2024.04.02