분류 전체보기 294

[UE4] 오브젝트 생성 - CreateDefaultSubobject , NewObject, SpawnActor

CreateDefaultSubobject , NewObject, SpawnActor 언리얼 엔진에서의 UObject는 오브젝트 프로토입을 기본으로 합니다. 각 UClass는 UObject와 연관된 CDO(Class Default Object)라고 불리는 디폴트 인스턴스를 갖습니다. 이 인스턴스는 엔진이 초기화 될때 클래스 생성자를 통해 최초로 단 한번 할당됩니다. 이후에 생성자는 절대로 다시 불려지지 않고 새로운 UObject를 생성시 복사를 생성 합니다. 이것이 의미하는 것은 UObject 생성자는 어떠한 런타임 로직을 포함 할수 없다는 것입니다. 만약 Actor Component와 같은 서브 오브젝트들을 포함하고 있는 오브젝트라면, 이러한 디폴트 오브젝트들은 처음에 생성되어져야 합니다. UObject..

[UE4] blueprint의 부모 클래스가 변경되는 현상 해결 방법

blueprint의 부모 클래스가 변경되는 현상 해결 방법 블루프린트를 만들면서 EquippableItem으로 설정하고 저장하였는데 에디터를 다시 구동시키면 이상하게도 부모의 클래스 이름이 PlusItem으로 변경되는 현상이 있었습니다. 인터넷 서칭을 해보니 다음과 같은 글을 찾을 수 있었습니다. My problem is similar. I cannot use File >> Reparent Blueprint (I have renamed the original parent class. But the renamed new class didn't show up). What helped is to add the following line to DefaultEngine.ini below [/Script/Engin..

[UE4] UObject의 참조 카운트(UObject Reference Count)

어떠한 오브젝트의 참조 카운트를 얻을 수 있는 코드입니다. static int32 URamaStaticFunctionLib::GetObjReferenceCount(UObject* Obj, TArray* OutReferredToObjects = nullptr) { if(!Obj || !Obj->IsValidLowLevelFast()) { return -1; } TArray ReferredToObjects;//req outer, ignore archetype, recursive, ignore transient FReferenceFinder ObjectReferenceCollector(ReferredToObjects, Obj, false, true, true, false); ObjectReferenceColl..

[UE4] 액터의 수명 주기, 가비지 콜렉터

액터의 수명 주기 액터의 생명 주기에 대해서 이해를 하고 있어야 겠습니다. 이 문서는 액터의 수명 주기에 대한 일반적 개요서로, 액터가 레벨에 어떻게 인스턴스가 생성 (Spawn) 되고 소멸 (Destroy) 되는지에 대해서입니다. https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Objects/Optimizations/ 언리얼 오브젝트 처리 UObject 시스템의 기능에 대한 개요입니다. docs.unrealengine.com 가비지 콜렉터 언리얼 엔진은 자체 스마트 포인터를 제공하며 이를 통해 자동으로 가비지 콜렉션을 수행합니다. [게임 개발/Unreal Engine 기본]..

[UE4] 언리얼 오브젝트의 기능

클래스, 프로퍼티, 함수에 적합한 매크로로 마킹해 주면 UClass, UProperty, UFunction 으로 변합니다. 그러면 언리얼 엔진이 접근할 수 있어, 다수의 내부적인 처리 기능을 구현할 수 있습니다. 자동 프로퍼티 초기화 UObject는 생성자 호출 전 초기화시 자동으로 클래스의 UProperty/네이티브 멤버 모두 0으로 채워집니다. 이후 클래스 생성자에서 커스텀 값으로 초기화 가능합니다. 레퍼런스 자동 업데이트 AActor 또는 UActorComponent가 소멸되면, 리플렉션 시스템에 보이고 있는 그에 대한 모든 레퍼런스는 자동으로 null 이 됩니다. 댕글링 포인터 문제의 소지를 줄인다는 장점이 있지만, 다른 곳에서 포인터를 언제든지 소멸시켜 null이 될 수도 있습니다. 여기서 최고..

[UE4] 스마트포인터 - TSharedPtr, TWeakPtr, TUniquePtr

UE4는 C++11 스마트 포인터의 커스텀 구현을 제공하고 있으며 다음과 같은 이점을 제공합니다. 메모리 누수 방지 스마트 포인터(TWeakPtr, TWeakObjectPtr 제외)는 공유 참조가 존재하지 않을 때 객체를 자동으로 해제합니다. 약한 참조 약한 포인터는 공유 참조에서 발생 할 수 있는, 순환 참조 문제와 삭제된 오브젝트를 참조하는(dangling) 포인터 문제를 방지할 수 있습니다. 스레드 안전 옵션 언리얼 스마트 포인터 라이브러리에는 멀티스레드에 걸쳐 참조 카운팅을 관리하는 코드인 스레드 세이프(thread-safe) 코드가 포함되어 있습니다. 스레드 안정성이 필요하지 않다면 그 대신에 향상된 퍼포먼스를 구현할 수 있습니다. 런타임 안전 TSharedRef는 절대 null 일 수 없으며 ..

[UE4] 문자열 변환 - FName, FText, String

문자열 클래스간 변환 변환 형식 변환 방법 FName → FString TestString = TestName.ToString(); FName → FText TestText = FText::FromName(TestName); FString → FName TestName = FName(*TestString); // 손실 위험 있음. FName이 대소문자 구분 없음 FString → FText TestText = FText::FromString(TestString); FText → FString TestString = TestText.ToString(); // 안전하지 않음. 언어 변환시 손실 위험 때문 FText → FName FText → FString -> FName // 직접 변환 없음 // 손실 위..

[UE4] 문자열 다루기 - FName, FText, String

FName 정적이며 가장 가벼운 문자열 클래스 비교시 대소문자 구분하지 않음 한 번만 저장하며 변경 및 조작 불가능 찾기나 키로 FName에 접근하는 속도 빠름 문자열 비교 FName Name1 = FName(TEXT("TestFName")); FName Name2 = FName(TEXT("TESTFNAME")); FName Name3 = FName(TEXT("TestFName3")); bool bCompare1 = (Name1 == Name2); // true, 대소문자 구분을 하지 않는다 bool bCompare2 = (Name1 == Name3); // false UE_LOG(TestProject, Warning, TEXT("bCompare1=%d bCompare2=%d"), bCompare1, b..

[UE4] 리플렉션

리플렉션 언리얼 엔진의 리플렉션 기능에 대해 예제 코드로 알아 봅시다. 먼저 언리얼 오브젝트 클래스를 만듭니다. UCLASS() class TESTPROJECT_API UMyObject : public UObject { GENERATED_BODY() private: UPROPERTY() int IntValue = 10; UPROPERTY() FString StrValue = "Str"; }; UMyObject를 생성하고 리플렉션 기능을 확인 할 수 있는 코드를 생성합니다. UCLASS() class TESTPROJECT_API ATestProjectGameModeBase : public AGameModeBase { GENERATED_BODY() public: ATestProjectGameModeBase(..

tistory URL 링크 색상 변경 방법

기본적인 HTML 편집 방법은 다음 글을 참고해주세요. [각종 팁] - tistory 코드 블럭 폰트 사이즈 변경하기 다음 코드는 색상 변경과 언더라인이 보이도록 하였다. .article a:link { color: blue !important; text-decoration: underline !important; } .article a:visited { color: gray !important; text-decoration: underline !important; } CSS 편집에 다음과 같이 추가한 후 "적용"을 눌러줍니다.

각종 팁 2022.02.08