Unreal Engine - TSubclassOf & StaticClass

2025. 2. 27. 23:20·Unreal Engine

완벽한 정보는 아닐 수 있다. 개발하면서 겪은 시행착오를 통해 얻은 내용을 정리한 글이다.

 

1. TSubclassOf


주로 이 타입으로 선언하는 변수는 BP를 불러올 때 사용한다.

 

예를 들어, UI를 만들 때 BP로 만든 위젯 BP를 불러와서 사용하고 싶을때 사용한다.

  • PlayerController에 아래와 같은 변수를 선언하고
TSubclassOf<UUserWidget> HUDWidgetClass;
  • 생성자에서 아래와 같이 BP를 불러와서 사용할 수 있다.
static ConstructorHelpers::FClassFinder<UUserWidget>HUDWidgetBP(TEXT("/Game/HJ/UI/WBP_HUD.WBP_HUD_C"));
if (HUDWidgetBP.Succeeded())
{	
	HUDWidgetClass = HUDWidgetBP.Class;
}
  • 이후 우리가 코드로써 작업하기 편하기 위해 ~instance 라는 변수도 추가하여 CreateWidget을 하여 생성한 실체를 가지도록 한다.
//헤더
TObjectPtr<UUserWidget> HUDWidgetInstance;

//cpp
{
	if (HUDWidgetClass)
    {
        HUDWidgetInstance = CreateWidget<UUserWidget>(this, HUDWidgetClass);
        if (HUDWidgetInstance)
        {
            HUDWidgetInstance->AddToViewport();

            bShowMouseCursor = false;
            SetInputMode(FInputModeGameOnly());

            ADefaultGameState* DefaultGameState = GetWorld() ? GetWorld()->GetGameState<ADefaultGameState>() : nullptr;
            if (DefaultGameState)
            {
                DefaultGameState->UpdateHUD();
            }
        }
    }
}

 

또한 BP로 만든 액터를 가져올 때 아래와 같이 사용할 수 있다.

  • TSubclassOf로 선언한 변수를 UPROPERTY를 통해 디테일 창에서 볼 수 있게 만들면, BP에서 클래스를 지정할 수 있게 된다.
  • 이후 아래와 같이 생성할 수 있다.
TSubclassOf<AWeaponShell> WeaponShellClass;

AWeaponShell* ShellActor = GetWorld()->SpawnActor<AWeaponShell>(WeaponShellClass, ShellLocation, ShellRotation, SpawnParams);

 

 

2. StaticClass


우리가 동적으로 생성하고 싶은 클래스가 액터를 상속받아 만든 클래스 일때 사용할 수 있다. 

특히 C++로만 동작을 하도록 할 때 사용한다.

 

결론적으로 StaticClass()는 클래스 타입을 반환하는 역할을 한다.

주로 클래스의 인스턴스를 생성하거나 리플렉션을 통해 클래스에 대한 정보를 동적으로 가져올 때 사용한다.

 

위에서 언급한 TSubclassOf와 차이점은 아래와 같이 사용한다는 점이다.

  • 변수를 따로 선언하지 않고,
  • StaticClass를 통해 정보를 가져오고, 동적으로 객체를 생성할 수 있게 해준다.
  • 참고) SpawnActor 함수의 첫번째 인자 파라메터 타입이 UClass* 이다.
   AWeaponShell* ShellActor = GetWorld()->SpawnActor<AWeaponShell>(AWeaponShell::StaticClass(), ShellLocation, ShellRotation, SpawnParams);

'Unreal Engine' 카테고리의 다른 글

Unreal Engine - 애님 몽타주  (0) 2025.03.05
Unreal Engine - 캐릭터 앉기 및 구르기  (0) 2025.03.05
Unreal Engine - 총기 반동, 데칼, 탄피 효과  (0) 2025.02.27
UE5 Issues : 총기 스폰 및 포인터  (0) 2025.02.27
UE5 Issues : 인벤토리 UI  (0) 2025.02.26
'Unreal Engine' 카테고리의 다른 글
  • Unreal Engine - 애님 몽타주
  • Unreal Engine - 캐릭터 앉기 및 구르기
  • Unreal Engine - 총기 반동, 데칼, 탄피 효과
  • UE5 Issues : 총기 스폰 및 포인터
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (176)
      • Unreal Engine (66)
      • C++ (19)
      • 알고리즘(코딩테스트) (26)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    BFS
    const
    Vector
    gamestate
    character animation
    DP
    enhanced input system
    C++
    motion matching
    actor 클래스
    템플릿
    cin함수
    additive animation
    addonscreendebugmessage
    상속
    applydamage
    매크로 지정자
    싱글턴
    map을 vector로 복사
    blend pose
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
Unreal Engine - TSubclassOf & StaticClass
상단으로

티스토리툴바