- 목차
길게 쓸일 없는거 정리
몽타주 편집창에서 Notify 추가
일부 최신버전의 언리얼 엔진(예 4.27 버전대)의 몽타주 편집창과 참고하고 있던 자료의 몽타주 편집창의 UI가 서로 같지 않아
Notify 편집을 어떻게 하나 고민을 했었다.
이 경우 Notify 영역 부분에서 우클릭을 해야 “노티파이 추가” 메뉴가 생성된다.
임포트에 실패했습니다. 알려지지 않은 ‘uasset’ 확장자 입니다.
- 방법 1 : uasset에 맞는 Unreal Engine 버전으로 시도한다.
- 방법 2 : 언리얼 에디터 쪽이 아니라 실제 탐색기 Project Content 폴더 내부에 직접 uasset을 복사한다.
언리얼 에디터 내부로 'uasset’을 드래그 앤 드롭 하는 경우 해당 에러가 발생하는데, 에디터가 아닌 실제 프로젝트의 콘텐츠 폴더 내부에 직접 복사해서 에디터에서 자동으로 인식하게끔하면 된다. 참고링크
[C1083] “No such file or directory”
- 방법 1 : 만일 현재 작업하고 있는 코드가 Content - Source 쪽이라면 (보통은 여기겠지만), Plugin에 있는 header를 include 했는지 살펴 본다. 즉,"…/…/…/plugins/ …" 경로로 시작하는 header를 지워본다.
- 방법 2 : IDE 프로그램 재실행
- 방법 3 : 컴퓨터 재부팅
[C7568] "... 뒤에 인수 목록이 없습니다"
헤더 순환 참조로 인하여 발생하는 오류.
- header는 가능한 h 파일 내에서 선언하도록 한다.
- header의 include 순서를 바꿔 보도록 한다. (예를 들면 a.h와 b.h가 존재한다면 b.h를 먼저 선언 해본다.)
순환 참조가 필요하다면. (클래스 선언)
A.h // A.cpp // B.h // B.cpp 이런 식으로 파일이 있다고 가정하고 둘 간 서로 참조해야된다면 아래 처럼 선언해본다.
- A.h : class B; (세미콜론 포함)
- A.cpp : #include B
- B.h : class A; (세미콜론 포함)
- B.cpp : #include A
Error
Error MSB3073
10>Microsoft.MakeFile.Targets(44,5): Error MSB3073 : ""C:\Program Files\Epic
Games\UE_5.3\Engine\Build\BatchFiles\Build.bat" 프로젝트이름 플랫폼 빌드타입 -Project="uproject파일 경로" -WaitMutex
-FromMsBuild" 명령이 종료되었습니다(코드: 6).
- 방법 1 : 열려있는 Unreal Engine을 닫고 다시 빌드해본다.
- 방법 2 : PC 재부팅하고 재시도
Error LNK2001, LNK1120, LNK2019
Error LNK2001 : 확인할 수 없는 외부 기호
Error LNK1120 : n개의 확인할 수 없는 외부 참조
Error LNK1120 : n개의 확인할 수 없는 외부 참조
Error LNK2019 : 함수에서 참조되는 확인할 수 없는 외부 기호
- 방법 1 : Plugin에 있는 매크로 코드를 (#define) 사용했을 경우. 제거하고 빌드 재시도.
- 방법 2 : "솔루션 다시 빌드" 또는 빌드 결과물(프로젝트와 플러그인에 있는 "Binaries", "Intermediate" 폴더 제거)을 제거하고 다시 빌드
- 방법 3 : 모듈 인식이 안되었을 수도 있다. "프로젝트이름".uproject 파일 우클릭 → "Generate Visual Studio project files" 명령을 수행하여 sln 파일을 재생성
- 방법 4 : class "모듈명_API" 클래스명
부분에서 중간 부분에 있는 "모듈명_API" 부분이 누락되었다면 추가해본다. - 방법 5 : Header include 순서 변경
- 방법 6 : 함수를 (Header에) 선언만 하고, (.h 또는 .cpp에) 정의가 되어 있는지 확인
Error LNK1169, LNK2005
Error LNK1169 : 여러번 정의된 기호가 있습니다.
Error LNK2005 : 이미 정의되어 있습니다.
Error LNK2005 : 이미 정의되어 있습니다.
- 방법 1 : Header가 정의가 제대로 되었는지 확인 "헤더 파일 맨 상단에 #pragma once 입력했는지 확인"
- 방법 2 : 모듈 종속성 상태 확인
- "모듈이름".Build.cs 파일에 PublicDependencyModuleNames, PrivateDependencyModuleNames가 잘 정의되었는지 확인
- ".uproject" 파일에 모듈 또는 플러그인 정의 상태 확인
- 방법 3 : "모듈이름".h 파일에 IMPLEMENT_PRIMARY_GAME_MODULE 매크로
확인.
IMPLEMENT_PRIMARY_GAME_MODULE 매크로는 단 하나의 모듈에만 존재해야되며, 나머지는 IMPLEMENT_MODULE로 정의해야된다. - 본인의 경우 "Editor" 에서 빌드되고 "Game"에서 빌드가 안되었는데 이것으로 해결.
"No such file or directory exists"
또는
Cannot open source file
"파일 이름"
- 방법 1
- "프로젝트 이름".Build.cs 파일의 "PublicDependencyModuleNames" 부분 (아니면 "PrivateDependencyModuleNames")에 모듈이 추가되었는지 확인
- 수정 했을 경우, "uproject" 파일 우클릭 → "Generate Visual Studio project files" 명령을 수행하여 sln 파일을 재생성해야된다.
- 방법 2 : h 또는 cpp 파일에 헤더가 포함되어 있는지 확인
새로 생성한 C++ 클래스가 프로젝트에서 인식하지 못함
- uproject 파일 우클릭 → "Generated Visual Studio Project files"
- Unreal 편집기 (예 : Visual Studio) 에서 프로젝트 빌드
- 헤더 포함관계 검토
- C++ 코드는 빌드 오류가 나지 않도록 적절히 편집할 것
the flolowing modules are missing or built when a different engine version
- 방법 1 : 프로젝트 경로에 한글이 있으면 안됨. 한글 제거 후, 재시도
- 방법 2 : .uproject 파일의 엔진 버전 확인
- .uproject 가 5.3으로 설정되어 있는데, 다른 버전으로 열면 뜰 수 있음.
- 방법 3 : "Rebuild" 또는 "Yes" 버튼이 있으면 클릭 해보고 재실행.
- 간혹 플러그인을 비활성화 하고, 실행한다는 메시지 일 수도 있으니 잘 확인해 볼것!
- 방법 4 : 빌드 관련 파일 (Intermediate, Binaries) 삭제 후 리빌드
- 위 폴더 삭제 후, "Generate Visual Studio project files" 실행
- 생성된 솔루션 파일(.sln)을 이용하여 IDE (Visual Studio) 실행
- 시작 프로젝트를 현재 자신이 실행하고자 하는 프로젝트로 설정한 후, "Development Editor" 로 설정하고 빌드
- IDE에서 실행 (또는 디버깅 모드)하거나 .uproject 더블 클릭으로 실행
FName, FText, FString
인코딩
일반적으로 스트링 변수 리터럴 설정시에는 TEXT() 매크로를 사용해야 합니다. TEXT() 매크로를 지정하지 않으면, 리터럴은 ANSI 를 사용해서 인코딩되기에,
지원되는 글자가 크게 제한됩니다.
FString 에 전달되는 ANSI 리터럴은 TCHAR (네이티브 유니코드 인코딩)으로의 변환을 겪어야 하기에, TEXT() 를 사용하는 편이 보다 효율적입니다. (From Doc UE5.3) + (Character encoding)
_T 매크로는 "tchar.h" 헤더가 필요함. 즉, Windows 플랫폼에 특화되어 있음.
애셋이 저장되지 않는 경우
원인 1 : 프로젝트가 여러개 열림
간혹 똑같은 언리얼 에디터 프로젝트가 2개 이상 열려있는 경우가 있다. 나머지를 닫은 후 재시도한다.
원인 2 : (블루프린트) 애셋 복사과정에서 꼬임
- 방법 1 : (블루프린트 내부에서) 변수명을 다르게 수정
- 방법 2 : "파일" → "모든 노드 새로고침"을 한 후, 재시도
- 방법 3 : 콘텐츠 브라우저에서 해당 애셋이 있는 폴더 우클릭 후, "리디렉터 수정" 실행
원인 3 : UMaterialInstanceDynamic을 C++ 생성자 내부에서 생성
"Graph is linked to external private object MaterialInstanceEditorOnlyData" 메시지와 나타난다. 포럼을
참고하면 C++ 생성자 내부에서 UMaterialInstanceDynamic을 생성하지 말라고 한다.
- 해결방법 : C++ 코드 생성자 이외 다른 함수에서 생성
- 함수 예시 1 : 해결방법은 Blueprint의 "Construct Script" 쪽에서 생성(Blueprint의 생성자는 C++ 생성자보다 늦게 호출된다.)
- 함수 예시 2 : C++ 코드에서 "PostActorCreated" 함수에서 생성
- 생성 예시 1 : 생성자에서 ConstructorHelpers::FObjectFinder 함수로 찾은 UMaterialInstance를 전역변수에 저장한 후, 다른 함수에서 전역변수를 이용하여 UMaterialInstanceDynamic을 생성 (포럼 참고 링크)
- 생성 예시 2 : (생성자 이외에) 다른 함수에서 LoadObject 함수를 사용 (포럼 참고 링크)
게임 exe 생성 (실제 플레이용)
- UE4 : 왼쪽 상단 “File” → “Package Project” → 원하는 플랫폼 선택
- UE5 : 상단에 탭 아래 부분에 있는 “Platform” → 원하는 플랫폼 → “Project Package”
패키징 오류 (Packaging Error)
Unknown structure
Error 메시지를 확인해본 결과 blueprint 부분에서 발생. 겉으로는 멀쩡해 보일지라도 하나씩 다시다시 수정해보자.
그리고 “파일” → “모든 노드 새로고침”
참고링크
기타 Shipping 관련 정리는 다음 링크 참조
https://likefeb16220.blogspot.com/2025/07/UnrealEngine-Shipping.html
텍스처 스트리밍 풀이 예산을 초과 했습니다 (Texture Streaming Pool Over Budget)
- 방법 (1) (임시) : 출력 로그 → CMD 부분에 “r.Streaming.PoolSize 원하는 용량 숫자” 입력
- 방법 (2) (반영구) : 해당 프로젝트 폴더 → Config 폴더 → DefaultEngine.ini 파일 열기 → [/Script/Engine.RendererSettings] 항목에 “r.Streaming.PoolSize=원하는 숫자” 입력 (항목이 없으면 추가한다.)
[에디터] 단위 바꾸기
Unreal은 기본적으로 mks 단위계를 사용한다. 단, "거리/길이" 부분은 센치미터로 되어 있다. 이를 바꾸기 위해서는 "프로젝트 세팅" → "에디터" → "외형" 부분에서 →
"거리/길이" 부분에 "Centimeters" 부분을 윈하는 단위로 바꾸면 된다.
객체 바닥에 놓기
키보드 End 키. 안되면 일단 해당 객체를 z축으로 올렸다가 다시 END키를 눌러본다.
(런타임에서) 객체가 이동, 회전되지 않음
Collider 확인
Outer
현재 객체의 부모라고 생각하자.
(실제 정의는 현재 객체를 가지고 있는 상위 객체를 의미. Garbage Collection과 밀접한 연관을 가짐.)
참고
"프로젝트이름".build.cs 파일 내부에 추가한 모듈이 인식되지 않음 OR 추가된 h, cpp 파일이 인식되지 않음
"프로젝트이름".uproject 파일 우클릭 → "Generate Visual Studio project files" 명령을 수행하여 sln 파일을 재생성
netsdk1045
빌드에 활용할 dotnet의 버전이 맞지 않는 경우임.
레벨에 배치된 액터 복사하기
레벨에 배치된 액터를 선택한 후, 키보드 alt키를 누른 상태에서 아무 이동 축을 눌러 이동 (액터가 새로 복사되며, 복사되어 생성된 액터가 축에 따라 이동됨)
런타임에서 조명이 밝기가 너무 어둡거나 안바뀌는 경우
- 방법 1 : 조명 모빌리티가 "스태틱" 인경우, 레벨 빌드 (라이팅만 빌드) 시도
- 방법 2 : 조명의 모빌리티를 "스테이셔너리" 또는 "무버블"로 변경
Actor 내부에서 WorldContext가 필요한 다른 객체 생성
C++ 생성자에서의 호출을 피하고 "PostInitializeComponents" 또는 "BeginPlay" 함수에서 생성하기. 즉, Actor가 완전 Spawn 되어
GetWorld()가 Null이 아닐 때까지 기다려야한다.
C++의 생성자에서는 GEngine도 아직 초기화 진행상태이다.
참고 (Actor 생명 주기)
https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-actor-lifecycle구조체 선언
가능한 기본 생성자 생성, 가능한 모든 코드를 Header 안으로 모두 넣기. (FORCEINLINE 활용도 좋음) (LNK2019, LNK2001 오류 방지)
int32 VS int
가능한 int32를 사용할 것.
각 (최신 운영체제가 아닌) OS마다 int의 크기가 다를 수 있는 점과 BP에서는 int32를 주로 사용함.
참고
Deprecated 표시
- 방법 1 : C++코드에서 클래스, 함수, 변수명 위에 아래와 같은 형식으로 입력
UE_DEPRECATED("5.3", "코멘트") - 방법 2 : C++ 코드에서 클래스, 함수, 변수명 위에 아래와 같은 형식으로 입력
[[deprecated("코멘트")]]
Bool Log 출력
|
1
2
3
4
5
6
7
|
bool bIsVisible = true;
UE_LOG(LogTemp, Warning, TEXT("Visibility: %s"), bIsVisible ? TEXT("true") : TEXT("false"));
//또는
UE_LOG(LogTemp, Warning, TEXT("Visibility (as int): %d"), bIsVisible); //1/0
|
cs |
C++과 Editor(의 디테일 패널)에서 Rotator
C++코드에서 생성자 : using FRotator UE::Math::TRotator<double>;
→ TRotator(T InPitch, T InYaw, T InRoll)
근데 실제로 에디터의 디테일 패널을 보면
Pitch → Y 부분에 위치 // Yaw → Z 부분에 위치 // Roll → X 부분에 위치
즉, X : Roll, Y : Pitch, Z : Yaw
주의하면서 써야된다...
참고
C++에서 객체 (에셋) 찾기
- 생성자 :
- ConstructorHelpers::FClassFinder<T>
- ConstructorHelpers::FObjectFinder<T>
- ConstructorHelpers::FObjectFinderOptional<T>
- 생성자 이외
- LoadObject<T>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//생성자 내부
static ConstructorHelpers::FObjectFinder<UStaticMesh> CamMesh(TEXT("에셋 레퍼런스 경로"));
TObjectPtr<UStaticMesh> CamMeshResult = CamMesh.Object; //로드한 것 사용
또는
UStaticMesh* CamMeshResult2 = CamMesh.Object; //로드한 것 사용
//생성자 이외
TObjectPtr<UStaticMesh> HtcMesh = LoadObject<UStaticMesh>(this /*여기에는 부모 액터나 소유자*/, TEXT("에셋 레퍼런스 경로"));
또는
UStaticMesh* HtcMesh2 = LoadObject<UStaticMesh>(this /*여기에는 부모 액터나 소유자*/, TEXT("에셋 레퍼런스 경로"));
|
cs |
TArray 내부의 모든 아이템 삭제 관련
(TArray만 아니라 다른 자료유형도 해당) 자동으로 인덱스 정렬해주는 자료 유형의 경우, foreach 구문을 이용하여 내부의 아이템 삭제하는 작업은 유의해야한다. 다음 loop body를
돌 때, 이미 삭제된 부분을 다시 참조할 수도 있기 때문이다.
이 경우에는 마지막 인덱스부터 처음 인덱스 방향으로 반대방향으로 참조하면 안전하게 삭제 가능하다.
Blueprint의 경우 "Reverse for Each Loop" 라는 노드를 제공한다. (다만, 배열 길이를 변동 시키는 작업은 하지말라고 한다.......)
|
1
2
3
4
5
6
7
8
9
10
11
12
|
TArray<TObjectPtr<AMyCharacter>> MyCharacterArray;
for (int32 i = MyCharacterArray.Num() - 1; i >= 0; --i)
{
TObjectPtr<AMyCharacter> Character = MyCharacterArray[i];
if (!IsValid(Character))
continue;
RemoveCharacter(Character);
}
|
cs |
Groom
(머리 색깔이 빨간색이 아님에도 불구하고) 갑자기 빨간색으로 나올 때
본인의 경우 Disable 된 GroomComponent에 Groom과 Binding 애셋을 설정하고 컴포넌트를 Enable (Activate) 하는 과정에서 발견.
비활성화 된 컴포넌트를 재활용할 때에는 활성화를 먼저한 다음 값을 할당해줘야한다. (모든 컴포넌트가 다 동일 할 듯?)
|
1
2
3
4
5
6
7
8
|
//활성화 및 보이게 하는 설정 부터 먼저 할 것!
MyComp->Activate(true);
MyComp->SetVisibility(true, true);
MyComp->SetHiddenInGame(false, true);
//MyComp->SetComponentTickEnabled(true);
//그 다음 설정~
MyComp->SetGroomAsset(GroomAsset, BindingAsset);
|
cs |
에디터 플레이에서 아웃라이너에서 액터 클릭시 에디터 크래시
| Unhandled Exception: EXCEPTION_STACK_OVERFLOW UnrealEditor_Core!FLLMScopeFromPtr::FLLMScopeFromPtr() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\HAL\LowLevelMemTracker.cpp:3871] UnrealEditor_Core!FMemory::Realloc() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\HAL\FMemory.inl:93] UnrealEditor_Core!TSizedHeapAllocator<32,FMemory>::ForAnyElementType::ResizeAllocation() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Containers\ContainerAllocationPolicies.h:700] UnrealEditor_Slate!TArray<FMRSWRecursiveAccessDetector::FDestructionSentinel * __ptr64,TSizedInlineAllocator<4,32,TSizedDefaultAllocator<32> > >::AllocatorResizeAllocation() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Containers\Array.h:3071] UnrealEditor_Slate!TDelegateAccessHandlerBase<FNotThreadSafeDelegateMode>::FWriteAccessScope::FWriteAccessScope() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateAccessHandler.h:139] UnrealEditor_Slate!V::TBaseSPMethodDelegateInstance::CreateCopy() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:258] UnrealEditor_Slate!TDelegate<void __cdecl(float),FDefaultDelegateUserPolicy>::CopyFrom<FDefaultDelegateUserPolicy>() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl:610] UnrealEditor_Slate!SScrollBar::Construct() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Widgets\Layout\SScrollBar.cpp:14] UnrealEditor_Slate!STableViewBase::ConstructChildren() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Private\Widgets\Views\STableViewBase.cpp:94] UnrealEditor_DetailCustomizations!SListView<TSharedPtr<FString,1> >::Construct() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Public\Widgets\Views\SListView.h:288] UnrealEditor_DetailCustomizations!SComboBox<TSharedPtr<FString,1> >::Construct() [D:\build\++UE5\Sync\Engine\Source\Runtime\Slate\Public\Widgets\Input\SComboBox.h:214] UnrealEditor_DetailCustomizations!TSlateDecl<SComboBox<TSharedPtr<FString,1> >,RequiredArgs::T0RequiredArgs>::operator<<=() [D:\build\++UE5\Sync\Engine\Source\Runtime\SlateCore\Public\Widgets\DeclarativeSyntaxSupport.h:976] UnrealEditor_DetailCustomizations!FBodyInstanceCustomization::CreateCustomCollisionSetup() [D:\build\++UE5\Sync\Engine\Source\Editor\DetailCustomizations\Private\BodyInstanceCustomization.cpp:422] UnrealEditor_DetailCustomizations!FBodyInstanceCustomization::AddCollisionCategory() [D:\build\++UE5\Sync\Engine\Source\Editor\DetailCustomizations\Private\BodyInstanceCustomization.cpp:202] UnrealEditor_DetailCustomizations!FBodyInstanceCustomization::CustomizeChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\DetailCustomizations\Private\BodyInstanceCustomization.cpp:267] UnrealEditor_PropertyEditor!FDetailPropertyRow::OnItemNodeInitialized() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:373] UnrealEditor_PropertyEditor!FDetailItemNode::InitPropertyEditor() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:164] UnrealEditor_PropertyEditor!FDetailItemNode::Initialize() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:52] UnrealEditor_PropertyEditor!FDetailPropertyRow::GenerateChildrenForPropertyNode() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:473] UnrealEditor_PropertyEditor!FDetailPropertyRow::OnGenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:405] UnrealEditor_PropertyEditor!FDetailItemNode::GenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:437] UnrealEditor_PropertyEditor!FDetailPropertyRow::GenerateChildrenForPropertyNode() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:473] UnrealEditor_PropertyEditor!FDetailPropertyRow::GenerateChildrenForPropertyNode() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:454] UnrealEditor_PropertyEditor!FDetailPropertyRow::OnGenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:405] UnrealEditor_PropertyEditor!FDetailItemNode::GenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:437] UnrealEditor_PropertyEditor!FDetailCategoryImpl::GenerateNodesFromCustomizations() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailCategoryBuilderImpl.cpp:1089] UnrealEditor_PropertyEditor!FDetailCategoryImpl::GenerateChildrenForSingleLayout() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailCategoryBuilderImpl.cpp:1111] UnrealEditor_PropertyEditor!FDetailCategoryImpl::GenerateChildrenForLayouts() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailCategoryBuilderImpl.cpp:1127] UnrealEditor_PropertyEditor!FDetailCategoryImpl::GenerateLayout() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailCategoryBuilderImpl.cpp:1303] UnrealEditor_PropertyEditor!FDetailPropertyRow::OnGenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:393] UnrealEditor_PropertyEditor!FDetailItemNode::GenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:437] UnrealEditor_PropertyEditor!FDetailPropertyRow::GenerateChildrenForPropertyNode() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:473] UnrealEditor_PropertyEditor!FDetailPropertyRow::OnGenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:405] UnrealEditor_PropertyEditor!FDetailItemNode::GenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:437] UnrealEditor_PropertyEditor!FDetailPropertyRow::GenerateChildrenForPropertyNode() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:473] UnrealEditor_PropertyEditor!FDetailPropertyRow::GenerateChildrenForPropertyNode() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:454] UnrealEditor_PropertyEditor!FDetailPropertyRow::OnGenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:405] UnrealEditor_PropertyEditor!FDetailItemNode::GenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:437] UnrealEditor_PropertyEditor!FDetailPropertyRow::GenerateChildrenForPropertyNode() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:473] UnrealEditor_PropertyEditor!FDetailPropertyRow::OnGenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailPropertyRow.cpp:405] UnrealEditor_PropertyEditor!FDetailItemNode::GenerateChildren() [D:\build\++UE5\Sync\Engine\Source\Editor\PropertyEditor\Private\DetailItemNode.cpp:437] |
메모리 점유율이 올라가면서 위와 같이 에러문을 띄우며 크래시가 떴다면....
C++ 코드에서 UPROPERTY 키워드를 사용한 변수들의 Visible 속성을 제거하거나 UFUNCTION 함수 (예를 들어 Getter를 만든다던가)로 대체 한다.
즉, Editor에서도 보일 수 있는 속성들이 중복으로 사용되어서 이 것들이 재귀로 호출되어 발생하는 문제다.







댓글
댓글 쓰기