[UE5] SetBrushFromSoftTexture함수 분석
UE52025. 6. 21. 18:32[UE5] SetBrushFromSoftTexture함수 분석

UImage클래스의 SetBrushFromSoftTexture함수를 간단하게 분석하고 본인 피셜로 정리하였습니다.우선 해당함수는 텍스쳐를 '비동기 로딩'을 해주는 함수이다. ue에서는 ref가 두가지로 나뉘는데 첫번째는 hard ref 두번째는 soft ref가 있다. hard ref는컴파일 타임에 설정된 Resource 또는 Instance에 대한 직접적인 포인터이다.우리의 캐릭터가 로드되면서, 함께 로딩하는 TObjectPtr로 선언한 언리얼 오브젝트들도 메모리에 함께 로딩된 것을 의미하고 soft ref는 필요한 데이터만 로딩하도록 할 수 있는 것을 의미한다. 에셋의 경로만을 가지고 있고 사용자가 manual하게 로드해주어야한다(필요시) SetBrushFromSoftTexture함수는 텍스쳐를 비동..

[UE] UnrealEngine 빌드 과정과 Module 추가방법
UE52025. 5. 30. 15:56[UE] UnrealEngine 빌드 과정과 Module 추가방법

우선 unreal engine이 어떤 요소들로 이루어져있는지 부터 알아보자.ue는 module, plugin, project로 구성이 되어있으며 ue에서 코드 구조를 조직화하고 확장하는데 필수적인 구성요소들로 이루어져있다. Module이란module은 에디터 툴, 런타임 기능, 라이브러리 등과 같은 기능을 담당하는 코드의 패키지이다. 좀더 쉡게말하면 하나의 DLL처럼 동작하며, 코드 파일들을 하나의 단위로 묶어주는 역할을 한다.각 module은 .cpp, .h를 함께 갖고있으며, 이 둘을 하나의 최소실행 단위로 생각할 수 있다. module은 프로젝트, 플러그인과 같은 다른 요소에 종속적이다. 즉, 모듈은 단독적으로 동작할 수 없으며, 다른 plugin 또는 project와 함께 동작하도록 설계되어야 한..

[UE] Lyra ExperienceManagerComponent::StartExperienceLoad
UE52024. 1. 25. 20:21[UE] Lyra ExperienceManagerComponent::StartExperienceLoad

이번 글은 Lyra프로젝트의 ExperienceManagerComponent::StartExperienceLoad함수 분석글입니다. Experience Load과정을 전부 다 정리하기에는 너무빡세서 제가 햇갈렸던 부분과 몰랐던 부분 위주의 개념이 들어간 함수 하나만 잡아서 분석 한 글입니다. AssetStreaming, FStreamableManager, FStreamableHandle의 간단한 개념과 비동기 로드시 어떤 흐름으로 Delegate들을 호출하는지 간단한 흐름만 분석하였습니다. 실제 GetPrimaryAssetID내부의 CDO와 연관성이라던지 좀더 자세한 부분들은 Lyra프로젝트를 통해 알아봐주시면 감사하겠습니다 ㅎㅎ (추후 정리 할 수 있으면 정리 할거같네요) 호출과정 일단 Lyra의 Ex..

[UE] Unreal Smart Pointer
UE52024. 1. 23. 23:33[UE] Unreal Smart Pointer

UE의 스마트 포인터 라이브러리에는 아래 4가지 스마트 포인터가 있습니다. - TSharedPtr - TSharedRef - TWeakPtr - TUniquePtr 위 스마트 포인터들은 메모리 할당과 추적의 부담을 해소해주도록 설계된 C++11의 스마트 포인터의 커스텀 구현입니다. 위 스마트 포인터들은 언리얼 오브젝트(UObject)에 대해 사용할 수 없습니다. 언리얼 오브젝트(UObject)는 별도의 메모리 추적 시스템(GC)를 사용하기 때문입니다. (UObject GC에 의헤 TSharedPtr로 관리됩니다. 그래서 TSharedPtr로 UObject를 가르킬 수 없습니다. => 사이클 발생) TSharedPtr 위에서 설명한것과 같이 TSharedPtr은 UObject를 가르킬 수 없습니다. UOb..

[UE] C1189 에러 해결방법
UE52024. 1. 22. 19:07[UE] C1189 에러 해결방법

1시간 정도 해매다가 해결한 에러입니다. 원인부터 설명하면 저는 일단 filename.generated.h 를 두번 참조하여 발생하였습니다...;; 당연히 한번만 include 하는것이 정상이지만 정신없이 파일들 만들고 필요한 헤더 파일들을 추가하다 발생한 문제인듯합니다. 처음에는 "Severity Code Description Project File Line Suppression State Error C1189 #error: "LyraCloneEquipmentDefinition.generated.h already included, missing '#pragma once' in LyraCloneEquipmentDefinition.h" LyraClone C:\Rookiss\Rookiss_Lyra\Unrea..

[UE] IsA
UE52024. 1. 20. 21:16[UE] IsA

APawn* ULyraCloneEquipmentInstance::GetTypedPawn(TSubclassOf PawnType) const { APawn* Result = nullptr; if (UClass* ActualPawnType = PawnType) { if (GetOuter()->IsA(ActualPawnType)) { Result = Cast(GetOuter()); } } } 위 코드에서 GetOuter()->IsA(PawnType)을 호출하고 있습니다. IsA함수는 Returns true if this object is of the specified type. https://docs.unrealengine.com/4.26/en-US/API/Runtime/CoreUObject/UObject/UO..

[UE] UObject::CreateUObject Delegate 바인딩 언제, 어디서, 왜 쓰는지
UE52024. 1. 5. 23:19[UE] UObject::CreateUObject Delegate 바인딩 언제, 어디서, 왜 쓰는지

이번글은 제가 햇갈렸던 Delegate에 대한 글입니다. DECLARE_DELEGATE_OneParam(FMyDelegate, int32); ---------- UCLASS() class DELEGATETEST_API TestClass: public AActor { GENERATED_BODY() // .... public : FMyDelegate TestClass_OneParam; }; ---------- void TestCharacter::CallDeleFunc_Single_OneParam(int32 nValue) { UE_LOG(LogTemp, Warning, TEXT("CallDeleFunc_Single_OneParam / %d"), nValue); } void TestCharacter::Begin..

[UE] UE_INLINE_GENERATED_CPP_BY_NAME + LNK2005
UE52024. 1. 3. 17:23[UE] UE_INLINE_GENERATED_CPP_BY_NAME + LNK2005

이번글은 제가 Lyra프로젝트 클론코딩하다 UE_INLINE_GENERATED_CPP_BY_NAME 메크로안 매개변수를 잘 못 전달하여 LNK2005에러를 해결한 과정과 UE_INLINE_GENERATED_CPP_BY_NAME를 정리한 글입니다. 일단 해결한 방법은 ㄱ무식하게 작성했던 파일들을 노트패드에 다 복붙해두고 만들었던 파일 전부 다 삭제후 파일들을 다시 하나씩 만들어 빌드를 한단계씩 해나가며 원인을 찾아 해결하게 되었습니다. 원인은 LyraPawnComponent_CharacterParts.cpp .h, LyraControllerComponent_CharacterParts.cpp .h 이렇게 각각 4개씩 있고 각각의 .cpp파일 상단에 UE_INLINE_GENERATED_CPP_BY_NAME( ..

image