simeddk / GoThere

2209
0 stars 0 forks source link

Assertion faild: Export.Object == nullptr 오류 #16

Open simeddk opened 1 year ago

simeddk commented 1 year ago

언리얼 uproject 열었을 때 아래 메세지가 뜨면서 열리지 않는 경우, 메세지를 읽다 보면 Gamemode 생성자에서 문제가 있음을 알 수 있습니다.(아래 로그 아래에서 4번째 줄)

오류 로그


Assertion failed: Export.Object == nullptr [File:D:/Build/++UE4/Sync/Engine/Source/Runtime/CoreUObject/Private/UObject/LinkerLoad.cpp] [Line: 4331]

UE4Editor_Core!AssertFailedImplV() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:100]
UE4Editor_Core!FDebug::CheckVerifyFailedImpl() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Private\Misc\AssertionMacros.cpp:450]
UE4Editor_CoreUObject!FLinkerLoad::CreateExport() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:4331]
UE4Editor_CoreUObject!FLinkerLoad::operator<<() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:5048]
UE4Editor_CoreUObject!UClass::Serialize() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:4459]
UE4Editor_Engine!UBlueprintGeneratedClass::Serialize() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Engine\Private\BlueprintGeneratedClass.cpp:1677]
UE4Editor_CoreUObject!FLinkerLoad::Preload() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:3820]
UE4Editor_CoreUObject!FLinkerLoad::CreateExport() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:4572]
UE4Editor_CoreUObject!FLinkerLoad::IndexToObject() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:4811]
UE4Editor_CoreUObject!FLinkerLoad::CreateExport() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:4185]
UE4Editor_CoreUObject!FLinkerLoad::CreateExportAndPreload() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:3233]
UE4Editor_CoreUObject!FLinkerLoad::LoadAllObjects() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\LinkerLoad.cpp:3397]
UE4Editor_CoreUObject!LoadPackageInternal() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:1312]
UE4Editor_CoreUObject!LoadPackage() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:1427]
UE4Editor_CoreUObject!ResolveName() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:767]
UE4Editor_CoreUObject!StaticLoadObjectInternal() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:829]
UE4Editor_CoreUObject!StaticLoadObject() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:904]
UE4Editor_CoreUObject!StaticLoadClass() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:937]
UE4Editor_U01_Spawn!ConstructorHelpersInternal::FindOrLoadClass() [B:\UE_4.25\Engine\Source\Runtime\CoreUObject\Public\UObject\ConstructorHelpers.h:87]
UE4Editor_U01_Spawn!CHelpers::GetClass<APawn>() [B:\Unreal_New\U01_Spawn\Source\U01_Spawn\Utilities\CHelpers.h:30]
UE4Editor_U01_Spawn!ACGameMode::ACGameMode() [B:\Unreal_New\U01_Spawn\Source\U01_Spawn\CGameMode.cpp:7]
UE4Editor_CoreUObject!UClass::CreateDefaultObject() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:3672]
UE4Editor_CoreUObject!UObjectLoadAllCompiledInDefaultProperties() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectBase.cpp:861]
UE4Editor_CoreUObject!ProcessNewlyLoadedUObjects() [D:\Build\++UE4\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectBase.cpp:950]
.................

해결방법


  1. CGameMode 생성자 내용을 주석처리 합니다.(DefaultPawnClass 세팅하는 부분) -> 컴파일까지 하시오
  2. 여기까지 해도 에디터는 다시 열릴겁니다.
  3. CGameMode를 상속받는 BP_GameMode를 만듭니다.
  4. BP_GameMode를 열고, DefaultPawnClass 항목에 BP_CPlayer_C를 수동으로 등록합니다.
  5. 프로젝트 세팅 -> 맵 & 모드에서 BP_GameMode로 변경합니다.

원인은.. 대체 왜..?


이게 원인인지는 모르겠는데, vs2019에서 빌드를 하면 언리얼 엔진 설치 폴더의 Build.bat이 실행됩니다. 이때 뒤에 명령어 파라미터들이 추가로 붙는데, 예전하고 조금 바뀌었네요.. (이 명령어는 비주얼스튜디오 출력창 내에서도 확인할 수 있습니다. 해당 명령어롤 복붙해서 콘솔창에서 쳐도 되거든요.) 어쨌든, 생성자에서 넣었던 클래스 레퍼런스의 널체크를 그냥 건너 뛰는걸로 확인되었습니다..(체크 if문에 안걸림...) 그런데 이게 vs2019의 문제인지, 언리얼의 문제인지 아직 알 수가 없네요.