게임 개발/Unreal Engine 80

[UE4] Assertion Macros - check, verify, ensure

참고 : https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/Assertions/ 어서트 docs.unrealengine.com Assert, 어서트란 주어진 코드 조각이 가정하는 상황을 검증하는 도구입니다. 포인터의 NULL 여부를 검증하는 간단한 것에서부터, 특정 함수에 재진입했는지와 같은 복잡한 검증도 가능합니다. UE4 에는 이러한 유형의 검증을 하기 위한 매크로 시리즈가 제공됩니다. 특정 빌드 환경설정 하에서는 컴파일시 제외시킬 수 있도록 매크로로 되어 있는데, 퍼포먼스 상의 이유거나 최종 빌드에서는 필요치 않기 때문이거나 입니다. 매크로를 직접 확인하려면, 이곳에서 찾을 수 있습니다: /UE4/Engi..

[UE4] WITH_EDITOR, WITH_EDITORONLY_DATA, GIsEditor

WITH_EDITOR /** * Whether we are compiling with the editor;must be defined by UBT */ Editor가 컴파일될때 WITH_EDITOR의 코드가 컴파일된다는 것을 의미합니다. GIsEditor /** *True if we are in the editor. *Note that this is still true when using Play In Editor. You may want to use GWorld->HasBegunPlay in that case. */ Editor에서 실행하는 코드의 경우 사용합니다. 유의점은 PIE(Play In Editor)에서도 여전히 Editor이므로 이런 경우에는 GWorld->HasBegunPlay()를 사용합..

[UE4] 커스텀 구조체 TArray Contains 동작을 위한 oprator== 구현

커스텀 구조체를 정의하고 TArray로 사용할 경우가 있습니다. 다음과 같이요. TArray MyDataArray; MyDataArray에 아래와 같이 특정 데이터를 가지고 있는지 검사하고자 합니다. FMyData Data; ... MyDataArray.Contains(Data); Contains가 정상 동작하려면 아래와 같이 oprator==를 구현해 주어야 합니다. 그렇지 않으면 컴파일 오류가 발생합니다. USTRUCT() struct FMyData { GENERATED_BODY() AActor MyActor; float Prob; friend bool operator==(const FMyData& Lhs, const FMyData& Rhs) { return Lhs.MyActor == Rhs.MyAc..

[UE4] AActor 에디터에서 선택 Event 구현

에디터에 액터를 배치하고 난이후 액터를 선택 했을때 어떠한 구현을 하거나 선택 해제가 되었을때 어떠한 구현을 해야할 경우 이러한 이벤트를 통보 받을 수 있어야 겠습니다. 다음 페이지를 참고하였으며 구현 코드는 아래에 있습니다. UrealEd가 포함된 에디터 모듈에서 구현 해야합니다. https://docs.unrealengine.com/4.27/en-US/API/Runtime/Engine/Engine/USelection/ USelection Manages selections of objects. docs.unrealengine.com header 파일 구현 입니다. #pragma once #include "CoreMinimal.h" #include "Plus/SpawnSystem/PlusSpawnWave..

[UE5] Lyra 분석 - AnimBP Tour

ABP_Mannequin_Base 이 AnimBP의 Event Graph에 어떠한 로직도 없습니다. 로직은 게임 쓰레드에서 프로세싱 됩니다. 매틱마다, 각각의 AnimBP를 위한 Event Graph는 순차적으로 하나씩 실행되어져야 합니다. 이러한 것은 퍼포먼스 병목이 될 수 있습니다. 이 프로젝트를 위해서, 우리는 새로운 BlueprintThreadsafeUpdateAnimation 함수를 대신에 사용했습니다. BlueprintThreadsafeUpdateAnimation에서 로직은 여러 AnimBP를 동시에, Game Thread의 오버헤드 없이 병렬로 실행 할 수 있습니다. ABP_Mannequin_Base::BlueprintThreadSafeUpdateAnimation 이 함수는 게임 데이터를 모..

[UE5] TObjectPtr<T> 소개

UE5에서는 의무가 아닌 선택사항으로 Raw 포인터 대신에 TObjectPtr를 사용하는 것을 권장하고 있습니다. 예를 들어 USceneComponent* 는 TObjectPtr로 선언하여 사용합니다. 에디터 빌드에 다이내믹 해상도와 액세스 트래킹을 추가하면서 생겨났다. 함수의 파라미터나 로컬 변수로 사용시 Raw 포인터로 자동 변환 됩니다. 제품의 동작 또는 성능에는 영향을 미치지 않지만, 더 나은 에디터 빌드에서의 개발 경험을 할 수 있습니다. https://docs.unrealengine.com/5.0/ko/unreal-engine-5-migration-guide/ C++ 오브젝트 포인터 프로퍼티 다음 섹션은 C++ 코드를 사용하는 프로젝트에만 적용되나, C++ 프로젝트 대부분은 수정할 필요 없이 ..

[UE5] Quixel Bridge가 보이지 않는 현상 수정

참고: https://forums.unrealengine.com/t/missing-quixel-bridge-add-on-in-new-ue5/513622/37 Quixel Bridge가 보이지 않는 현상 수정 1. Epic Games Launcher 실행 2. Library로 이동 3. 보관함으로 스크롤 다운 4. “Bridge” 검색하여 설치 5. 에디터에 정상적으로 설치 되었고 사용으로 체크 된 것 확인합니다. 6. 정상적으로 Quixel이 추가 된 것을 볼 수 있습니다.

[UE4] DataTable->FindRow의 ContextString 의미?

UDataTable->FindRow에서 ContextString의 의미는 검색을 제대로 못할 경우 메시지 출력할때 이 스트링을 포함하여 출력합니다. template T* FindRow(FName RowName, const FString& ContextString, bool bWarnIfRowMissing = true) 다음의 코드를 보면 ContextString이 어떻게 출력되는지 알 수 있습니다. 코드가 의도하는 것은 DataTable '%s'이며 테이블의 이름을 넣어 주면 에러 발생시 어떤 테이블인지 알 수 있어서 유용합니다.​ if(RowStruct == nullptr) { UE_LOG(LogDataTable, Error, TEXT("UDataTable::FindRow : '%s' specified..