게임 개발/Unreal Engine 80

[UE4] 타입으로 모든 Asset 찾기

타입으로 모든 Asset 찾는 템플릿 함수 코드입니다. template void GetObjectsOfClass(TArray& OutArray) { FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked("AssetRegistry"); TArray AssetData; AssetRegistryModule.Get().GetAssetsByClass(T::StaticClass()->GetFName(), AssetData); for (int i = 0; i < AssetData.Num(); i++) { T* Object = Cast(AssetData[i].GetAsset()); OutArray.Add(Object); } } 다음과..

[UE4] 디스턴스 필드 소프트 섀도(Distance Field Soft Shadows)

https://docs.unrealengine.com/5.0/ko/distance-field-soft-shadows-in-unreal-engine/ 디스턴스 필드 소프트 섀도 메시 디스턴스 필드를 사용하여 부드러운 동적 영역 그림자를 만드는 법 개요입니다. docs.unrealengine.com 디스턴스 필드 섀도를 사용하여 부드러운 영역 그림자를 만들 수 있습니다. 이 그림자는 바닥 가까이 접한 그림자는 선명하게 유지하다 멀어질 수록 연하게 만드는 식으로 현실의 그림자를 흉내냅니다.

[UE4] TArray 퍼포먼스 최적화

https://www.unrealengine.com/ko/blog/optimizing-tarray-usage-for-performance?lang=ko Optimizing TArray Usage for Performance 언리얼 엔진에서 TArray 엘리먼트 유형별 크기가 동적으로 변하는 배열입니다. TArray 는 프로그래머에게 매우 편리하며, 코드베이스에 *많이* 사용됩니다. 하지만 미묘한 퍼포먼스 문제가 생길 수 www.unrealengine.com 압축된 메모리 공간에서 엄청 빠른 엘리먼트 반복처리를 원하는 경우, TArray 가 좋은 선택입니다. 하지만 코드를 작성하면서 추가, 제거 등의 작업에 대한 영향을 주의할 필요가 있습니다. - Reserve를 적절히 사용하면 메모리 할당 시도 회수를 ..

[UE5] Animation Retargeting 루트 모션 문제 해결

다음의 글과 같이 작업한후 테스트 해보니, 애니메이션을 루트 모션으로 설정하였지만 제자리에서 움직이지 않는 현상이 있었습니다. [게임 개발/Unreal Engine] - [UE5] Animation Retargeting 방법 다음의 글과 같이 하면 해결 되었습니다. https://forums.unrealengine.com/t/retargeting-root-bone-ue5/506512 해결 방법 Chain에 root를 추가 합니다. Chain Mapping 탭에서 root를 선택하고 Translation Mode를 Globally Scaled로 설정합니다.

[UE5] Animation Retargeting 방법

UE5에서는 UE4와 리타겟팅 하는 방법이 많이 바뀌었으며 그 과정을 정리하였습니다. Frank 애니메이션을 언리얼 마네킹으로 리타겟을 해보겠습니다. 소스 : SK_Frank_FS3_Meshes_Skeleton 타겟 : SK_Mannequin_Skeleton Retargeting Source 생성 SK_Frank_FS3_Meshes_Skeleton 파일을 열어 아래와 같이 Retargeting Source를 생성합니다. Retargeting Sources탭이 보이지 않는다면 다음의 버튼을 누릅니다. Retargeting 옵션 설정 SK_Mannequin_Skeleton에서 Retargeting 옵션이 보이도록 합니다. SK_Mannequin_Skeleton는 pelvis가 Animation이고 spine..

[UE5] 모션 워핑으로 회전과 대시 구현

모션 워핑 Motion Warping은 UE5의 실험 단계 기능으로 제공되고 있으며 루트 모션을 동적으로 타킷 정렬 할 수 있게 해줍니다. 쉽게 말해서, 캐릭터를 원하는 타이밍 구간에 원하는 위치와 방향으로 캐릭터를 이동시킬 수 있습니다. 캐릭터의 루트를 직접 이동시키는 방법이 아니며 루트 모션 애니메이션을 보간하여 캐릭터를 이동시키는 방식입니다. 모션 워핑 플러그인을 활성화해야 합니다. 언리얼 에디터 메뉴 바의 편집(Edit) > 플러그인(Plugins) 에서 내장 플러그인(Built-In) > 애니메이션(Animation) > 모션 워핑(Motion Warping) 으로 이동합니다. 플러그인을 활성화하고 에디터를 재시작합니다. (현재는 아직 실험단계 기능으로 제공 되고 있습니다.) 자세한 내요은 아래..

[UE5] Cannot open include file: 'CommonAnimationTypes.generated.h' 해결

기존 UE4 프로젝트를 UE5로 변환시 다음과 같은 오류가 가 발생 하였습니다. 1>C:\Program Files\Epic Games\UE_5.0\Engine\Source\Runtime\AnimGraphRuntime\Public\CommonAnimationTypes.h(7): fatal error C1083: Cannot open include file: 'CommonAnimationTypes.generated.h': No such file or directory 해결 방법은 '프로젝트.Build.cs' 파일의 PublicDependencyModuleNames에 AnimGraphRuntime 모듈을 추가하면 됩니다. PublicDependencyModuleNames.AddRange(new string[]..

[UE5] FHitResult의 Actor 문제 해결

FHitResult의 Actor는 GetActor()로 변경 되었습니다. UE4 코드 UE4에서는 WeakPointer를 기반 하였습니다. (TWeakObjectPtrBase::Get(), TWeakObjectPtrBase::IsValid()) TArray collidedActors; for (auto& hitResult : HitResults) { if (!hitResult.bBlockingHit && hitResult.Actor.IsValid()) { collidedActors.Add(hitResult.Actor.Get()); } } UE5 코드 WeakPointer에서 FActorInstanceHandle로 구현이 변경 되었습니다. TArray collidedActors; for (auto& hit..

[UE4] TSet의 KeyFuncs 사용하여 구조체 키를 사용는 방법

TSet의 KeyFuncs 사용하여 구조체 키를 사용는 방법을 알아 보겠습니다. TSet의 Syntax이며 두 번째 파라미터가 KeyFuncs입니다. template class TSet 먼저 간단한 구조체를 정의합니다. USTRUCT() struct FMyStruct { GENERATED_BODY() FMyStruct() : Name(""), SomeFloat(0.f) {} FMyStruct(FString name, float someFloat) : Name(name), SomeFloat(someFloat) {} UPROPERTY() FString Name; UPROPERTY() float SomeFloat; }; BaseKeyFuncs를 부모로하는 FMyStuct를 위한 KeyFuncs를 구현합니다. ..

[UE4] TMap의 KeyFuncs 사용하여 구조체 키를 사용는 방법

TMap의 KeyFuncs 사용하여 구조체 키를 사용는 방법을 알아 보겠습니다. TMap의 Syntax이며 마지막 파라미터가 KeyFuncs입니다. template class TMap : public TSortableMapBase 먼저 간단한 구조체를 정의합니다. USTRUCT() struct FMyStruct { GENERATED_BODY() FMyStruct() : Name(""), SomeFloat(0.f) {} FMyStruct(FString name, float someFloat) : Name(name), SomeFloat(someFloat) {} UPROPERTY() FString Name; UPROPERTY()..