UE4 39

[UE4] Enum을 문자로 변환(EnumToString)

다음과 같이 enum이 정의 되어 있고 문자열로 출력하는 방법을 알아 봅시다. UENUM(BlueprintType) enum class ELocomotionState : uint8 { Idle UMETA(DisplayName = "Idle"), Walk UMETA(DisplayName = "Walk"), Jog UMETA(DisplayName = "Jog"), Sprint UMETA(DisplayName = "Sprint"), }; 여러 방법이 있지만 다음의 코드가 가장 간단한 방법입니다. DEFINE_ENUM_TO_STRING 매크로를 작성이후 EnumToString 함수 호출하여 FString으로 출력합니다. DEFINE_ENUM_TO_STRING(ELocomotionState); ... ELocom..

[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] 문자열 변환 - 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] C++ Module Generator 소개

C++ Module Generator 설치 Epic games launcher 마켓에서 C++ Module Generator를 검색하여 설치합니다. 설치 후 C++ Module Generator를 Enable 시키고 에디터를 다시 실행합니다. 빈 Plugin 모듈 생성 먼저 MyPlugin이라는 이름으로 Runtime Plugin 모듈을 생성합니다. Editor 모듈 추가 Moudle Generator를 사용하여 MyPlugin에 Editor Moudle을 추가하자. Windows > Moudle Generator를 실행하여 MyPlugin에 Editor 모듈을 생성합니다. 솔루션 파일을 다시 만듭니다. 정상적으로 MyPlugin에 Runtime 모듈과 Editor 모듈이 추가 되어 있는 것을 볼 수 있..

[UE4] Custom Asset Type 구현 - Asset 구현 & 등록

이 글이전에 Plugin 모듈을 먼저 만들어야 하며 다음 글을 참고해 주세요. [게임 개발/Unreal Engine] - [UE4] Asset Type추가 - Plugin 모듈 만들기 커스텀 어셋 만들기 먼저 UObject를 상속받아 자신의 커스텀 어셋을 만듭니다. #pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "MyCustomAsset.generated.h" UCLASS() class TESTPLUGIN_API UMyCustomAsset : public UObject { GENERATED_UCLASS_BODY() UPROPERTY(EditAnywhere) int32 Value; UPROPERTY(Edit..

[UE4] Custom Asset Type 구현 - Plugin 모듈 만들기

Runtime 모듈과 Editor 모듈을 분리해서 만들 것입니다. 모듈을 분리하지 않아도 정상 동작 하지만 관례에 따라 언리얼 엔진 개발시에 Runtime 모듈과 Editor 모듈을 분리하여 개발합니다. 이렇게 하는 이유는 배포시에 용량이나 동작의 효율성 때문입니다. Runtime 모듈 만들기 먼저 Plugins > New Plugin 에서 빈 플러그으로 작성합니다. Runtime 모듈로 TestPlugin을 생성합니다. 수동으로 Editor 모듈 추가하기 C++ Moulde Generator를 사용하여 좀 더 편리하게 Editor 모듈을 추가 할 수 있으며 다음 글을 참고해 주세요. [게임 개발/Unreal Engine] - [UE4] C++ Module Generator 소개 아래 설명은 C++ Mo..

[UE4] Project Setting 카테고리 설정 (UDeveloperSettings)

Project Setting원하는 카테고리 이름을 새로 만들고 섹션을 설정 할 수 있습니다. UCLASS(config = TheFunniest, Defaultconfig, meta = (DisplayName = "The Funniest Thing")) class THEFUNNIEST_API UMyDeveloperSettings : public UDeveloperSettings { GENERATED_BODY() public: virtual FName GetCategoryName() const override; #if WITH_EDITOR virtual FText GetSectionText() const override; virtual FText GetSectionDescription() const over..