CreateDefault(Subobject) 사용 시 에러가 발생하고 터지는 문제가 발생했다. 생성자가 아닌 다른 위치에서 생성해서 발생한 문제였다.

 

목차

     

     


     

     

    [Unreal] CreateDefault(Subobject) 사용 시 터지는 문제해결


     

     

    문제 상황

     

    CreateDefault(Subobject) 사용할 때는 생성자 위치에서 생성해야 한다.

    Begin Play에 생성할 경우 동적할당으로 생성하게 되어 터지게 된다.

     

     


     

    코드 변경

     

    변경 전

    void ACAttachment_Bow::BeginPlay()
    {
    	...
    
    	//Player cast하기
    	PlayerCharacterCast = Cast<ACPlayer>(OwnerCharacter);
    
    	CheckNull(PlayerCharacterCast);
    	CHelpers::CreateComponent<USplineComponent>(this, &ArrowPathSpline, "ArrowPathSpline", Root);
    	ArcEndSphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent"));
    	ArrowPathSplineMesh = CreateDefaultSubobject<USplineMeshComponent>(TEXT("ArrowPathSplineMesh"));
    }

     

    변경 후

    ACAttachment_Bow::ACAttachment_Bow()
    {
    	...
        
    	//Player cast하기
    	PlayerCharacterCast = Cast<ACPlayer>(OwnerCharacter);
    
    	CheckNull(PlayerCharacterCast);
    	CHelpers::CreateComponent<USplineComponent>(this, &ArrowPathSpline, "ArrowPathSpline", Root);
    	ArcEndSphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent"));
    	ArrowPathSplineMesh = CreateDefaultSubobject<USplineMeshComponent>(TEXT("ArrowPathSplineMesh"));
    }

     

    링크

     

    https://daisy0461.tistory.com/72

     

    Unreal Class Default Object

    Unreal에서 A라는 Class를 만들게 되면 A라는 Class를 기반으로 A Class Default Object(CDO)를 생성한다. 이 Class Default Object는 Unreal Engine Reflection System을 가지고 있는 원본 Object이다. Unreal Engine이 시작할 때

    daisy0461.tistory.com