본문 바로가기
Lib/Unreal

Error: CDO Constructor Failed to Find Blueprint 해결 방법

by W00gie 2021. 4. 19.

최근 간단한 토이프로젝트로 UE4 데디케이트 서버를 이용한 멀티플레이 TPS 게임을 만들고 있습니다.

개발중 겪었던 에러와 해결책을 포스팅합니다.

 

발생한 에러는 CDO Constructor Failed to Find Blueprint '레퍼런스 경로' 입니다.

Blueprint 파일을 호출하는데에 있어서 오류가 발생한 경우 입니다.

해당 컨스트럭터가 실패한 파일은 MainCharacter 부분입니다.

 

언리얼 에디터 상에서 실행할때는 문제없이 게임이 플레이 되지만

빌드한 언리언엔진 데디케이티드 서버를 실행할 경우 다음과 같은 메시지와 함께 실행이 불가능합니다.

 

 

AMainCharacter::AMainCharacter()
{
 	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComp"));
	SpringArmComp->bUsePawnControlRotation = true;
	SpringArmComp->SetupAttachment(RootComponent);

	GetMovementComponent()->GetNavAgentPropertiesRef().bCanCrouch = true;

	GetCapsuleComponent()->SetCollisionResponseToChannel(COLLISION_WEAPON, ECR_Ignore);

	HealthComp = CreateDefaultSubobject<UHealthComponent>(TEXT("HealthComp"));


	CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComp"));
	CameraComp->SetupAttachment(SpringArmComp);

	WeaponAttachSocketName = "WeaponSocket";


	static ConstructorHelpers::FObjectFinder<UBlueprint> ItemBlueprint(TEXT("Blueprint'/Game/BP_Revolver.BP_Revolver'"));
	UE_LOG(LogTemp, Warning, TEXT("initialize"));
	if (ItemBlueprint.Object) {
		StarterWeaponClass = (UClass*)ItemBlueprint.Object->GeneratedClass;
	}
}

 

제 프로젝트의 경우 보이는 MainCharacter가 플레이어 캐릭터이고

해당 MainCharacter의 생성자에서 해당 캐릭터에게 Revolver라는 총기를 스폰해 Weapon Socket에 부착합니다.

총기를 스폰하는 과정을 이제 ConstructorHelper - 블루프린트 레퍼런스 경로 를 이용했는데 이 과정에서 오류가 발생했습니다.

 

구글링 해본 결과 런타임에서 블루프린트 에셋을 서버에서 인식하게 하려면 두가지 해결방법을 찾았습니다.

 

1) 레퍼런스의 경로에 _C 접미사를 붙이기

 

2) Blueprint 확장자 제거

    => "Blueprint'/Game/BP_Revolver.BP_Revolver'"  => "Blueprint'/Game/BP_Revolver.BP'"

 

아쉽게도 두가지 해결책 모두 해당 컨스트럭터 에러를 해결하는데 도움이 되지않았고.

다음과 같은 코드 수정을 통해 해결할 수 있었습니다.

 

static ConstructorHelpers::FObjectFinder<UClass> ItemBlueprint(TEXT("Blueprint'/Game/BP_Revolver.BP_Revolver_C'"));
	UE_LOG(LogTemp, Warning, TEXT("initialize"));
	if (ItemBlueprint.Object) {
		StarterWeaponClass = (UClass*)ItemBlueprint.Object;
	}

 

FObjectFinder 를 통해 레퍼런스 경로를 복사할때 처음부터 클래스 유형을 Blueprint가 아닌 UClass 형식으로 호출하는 방식입니다. Blueprint 유형이 아닌만큼 해당 변수안의 Object를 StarterWeaponClass 변수 안에 대입할때도 GeneratedClass를 생략합니다.

'Lib > Unreal' 카테고리의 다른 글

싱글, 멀티플레이 리스폰 시스템 구현 (C++ 소스코드)  (0) 2021.05.24