[UE5] Actor

GamzaTori·2024년 9월 25일

UE5 C++

목록 보기
2/27

Actor

  • 액터는 레벨에 배치할 수 있는 오브젝트

UE5부터 생포인터 대신 TObejctPtr을 사용하는 것을 권장

UPROPERTY()
UStaticMeshComponent* Box;   // 생포인터 대신
    
UPROPERTY()
TObjectPtr<UStaticMeshComponent> Box;   // TObjectPtr을 권장
  • TObjectPtr은 포인터 하나를 들고있는 것과 같다
  • 장기적으로 ObjectPtr으로 통일해서 만들면 정보를 추가해서 디버깅 등에서의 이점이 있다
  • 생성자에서는 게임 로직과 관련된 부분이 들어가면 안되고 최소한의 작업만 하는 것을 권장하고 실제 생성자 역할을 하는 것은 BeginPlay이다.
  • 생성자에서는 CDO(객체 샘플)와 연관있는 부분을 작업하고 실제로 게임이 시작되면서 처리해야하는 작업은 BeginPlay에서 하는것이 좋다

CreateDefaultSubobject를 통해 오브젝트를 생성할 수 있다

Box = CreateDefaultSubobject<UStaticmeshComponent>(TEXT("Box"));
    
ConstructorHelpers::FObjectFinder<UStaticMesh> FindMesh(TEXT("Path"));
if(FindMesh.Succeeded())
{
	Box->SetStaticMesh(FindMesh.Object);
}
  • CreateDefaultSuboject는 CDO를 통해 해당 객체의 가장 기본적인 형태를 복사해서 가져온다
  • FObjcetFinder는 언리얼엔진이 메타데이터를 참고하여 실제 객체를 가져오는 역할

자주 쓰는 ConstructorHelpers

ConstructorHelpers::FClassFinder<T>     // UClass를 찾는 역할
ConstructorHelpers::FObjectFinder<T>    // CDO를 찾는 역할
  • 액터를 Spawn 하기 위해서는 액터를 상속받아야 한다.
  • 임시로 레벨블루프린트에서 SpawnActor를 통해 호출할 수 있지만 이를 C++로 하기 위해 임시 Actor를 만들어서 구현할 수 있다.
  • 마치 main 함수처럼 엔트리로 사용할 수 있다.
  • BeginPlay에서 똑같이 Spawn한다면 동일하게 사용할 수 있다
// header
UPROPERY()
TObjectPtr<class ARActor> Actor;
    
// BeginPlay
FVector Location(0, 0, 0);
FRotator Rotation(0, 0, 0);
Actor = GetWorld()->SpawnActor<ARActor>(Location, Rotation);    // 액터 생성
    
Actor->SetLifeSpan(0.5f);     // 액터의 수명을 정할 수 있다
// GetWorld()->DestroyActor(Actor);    // 액터 소멸
  • SetLifeSpan으로 수명을 정해 미사일과 같은 오브젝트에 사용할 수 있다.

TSubClassof

UPROPERTY()
TSUbclassOf<ARActor> ActorClass;
  • T를 상속받은 객체가 아닌 클래스의 정보를 가질 수 있다.
  • 블루프린트로 만든 Actor 스폰하기
// 생성자
ConstructorHelpers::FClassFinder<ARActor> FindClass(TEXT("/Script/Engine.Blueprint'/Game/Blueprints/BP_RActor.BP_RActor_C'"));
if(FindClass.Succeeded())
{
	ActorClass=FindClass.Class;
}
    
// BeginPlay
Actor = Cast<ARActor>(GetWorld()->SpawnActor(ActorClass));    // UClass만 받는 버전
  • BP Class 타입인 경우 마지막에 _C를 붙여야한다
  • AActor를 반환하기 때문에 사용하고자 하는 ARActor로 캐스팅해주어야한다.
  • 언리얼엔진의 Cast는 C++의 dynamic_cast로 캐스팅 실패시 nullptr을 반환
profile
게임 개발 공부중입니다.

0개의 댓글