[언리얼] RootComponent가 런타임에 변경될 때 movement component 처리(SetUpdatedComponent)

jh Seo·2024년 10월 28일

언리얼

목록 보기
4/18

개요

ABasicEnemy::ABasicEnemy()
{
 	// Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
	AutoPossessAI = EAutoPossessAI::PlacedInWorldOrSpawned;
	AIControllerClass = ABasicEnemyAIController::StaticClass();

	DefaultSceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("DefaultSceneRoot"));
	RootComponent = DefaultSceneRoot;

	SkeletalMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("SkeletalMeshComponent"));
	SkeletalMeshComponent->SetupAttachment(DefaultSceneRoot);
	SkeletalMeshComponent->SetCollisionEnabled(ECollisionEnabled::NoCollision);

	StatusComponent = CreateDefaultSubobject<UStatusComponent>(TEXT("StatusComponent"));

	MovementComponent = CreateDefaultSubobject<UCustomFloatingPawnMovement>(TEXT("MovementComponent"));

위와같은 생성자에서 RootComponent를 DefaultSceneRoot으로 설정해둔 후,
RootComponent를 런타임에 받아오는 shape component를 충돌체로 한 CollisionComponent로 변경해봤다.
문제점은 MovementComponent가 변경된 CollisionComponent를 움직이는게 아닌
기존 DefaultSceneRoot를 움직였다..

해결

root컴퍼넌트를 변경하고 SetUpdatedComponent라는 함수를 통해 갱신시킬 수 있었다.

 MovementComponent->SetUpdatedComponent(CollisionComponent);

레퍼런스

언리얼 docs

profile
코딩 창고!

0개의 댓글