언리얼 엔진에서 클래스의 상속 관계는 매우 중요한 부분을 차지한다. 언리얼 엔진은 객체 지향 프로그래밍의 특징을 가지고 있기 때문에, 상속은 코드 재사용, 확장성 및 유지 관리를 신경써야 한다. 아래에 언리얼 엔진에서 일반적으로 사용되는 몇 가지 주요 클래스와 그들 사이의 기본적인 상속 관계에 대한 설명을 적었다.

 

목차

     

     


     

     

    Unreal 상속관계

     


     

     

    Unreal 상속관계와 특징 ("Is A" vs "Has A" 관계)

     

      데이터 level에 배치 시각적 실체 Contorller에 의해
    빙의 가능
    Character movement component Character
    전용 기능
    UObject O X X X X X
    AActor O O O X X X
    APawn O O O O X X
    ACharacter O O O O O O

     

    a UObject is not an AActor

    a UObject is not an APawn

     

    an AActor is a UObject

    an AActor is not an APawn

     

    an APawn is an AActor

    an APawn is a UObject

     


     

     

    Package - World - Level - Actor - Component

     

     

     


     

     

     

    Component 상속구조

     

    UActorComponent 

    • USceneComponent
      • UPrimitiveComponent
        • MeshComponent
        • ShapeComponent

     

     

    아래는 SplineMeshComponent 동적생성 예시

    #include "Components/SplineComponent.h"
    
    void ClassName()
    {
    	UClass* MyClass = USplineMeshComponent::StaticClass();
        FTransform RelativeTransform = FTransform();
        
        // Case 1
        if (USplineMeshComponent* NewSplineMeshComp = NewObject<USplineMeshComponent>(RootComponent))
        {
        	NewSplineMeshComp->SetRelativeTransform(RelativeTransform);
            NewSplineMeshComp->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);
            NewSplineMeshComp->RegisterComponent(); // 까먹지 않고 등록해주기!
        }
        
        // Case 2
    	UActorComponent* ActorComponent = AddComponentByClass(
        	USplineMeshComponent::StaticClass(),
            true,
            RelativeTransform,
            false);
            
        if (USplineMeshComponent* SplineMeshComponent = Cast<USplineMeshComponent>(ActorComponent))
        {
        	SplineMeshComponent->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);
            SplineMeshComponent->RegisterComponent();
        }
    }