Empty Actor

ºó ¾×Å͸¦ ¸¸µç ÈÄ¿¡ ±¸¸¦ Ãâ·Â Çغ¸ÀÚ.

1. ºó ¾×ÅÍ »ý¼º

¾ð¸®¾ó ¿¡µðÅÍ¿¡¼­ Actor¸¦ »ó¼ÓÇÏ¿© EmptyActor¸¦ »ý¼ºÇÑ´Ù.

EmptyActor.h ÆÄÀÏ

..............
UCLASS()
class UI_TEST_API AEmptyActor : public AActor
{
    GENERATED_BODY()
   
public:   
    AEmptyActor(const FObjectInitializer& ObjectInitializer);

protected:
    virtual void BeginPlay() override;

public:   
    virtual void Tick(float DeltaTime) override;
};

EmptyActor.cpp ÆÄÀÏ
#include "EmptyActor.h"

AEmptyActor::AEmptyActor(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    PrimaryActorTick.bCanEverTick = true;
}

void AEmptyActor::BeginPlay()
{
    Super::BeginPlay();
}

void AEmptyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

2. °ÔÀÓ¸ðµå¿¡¼­ ½ºÆÇ

AGameModeBase¸¦ »ó¼ÓÇÑ Aui_testGameModeBase::StartPlay¿¡¼­ ½ºÆÇ ½ÃŲ´Ù.

#include "ui_testGameModeBase.h"
#include "EmptyActor.h"

void Aui_testGameModeBase::StartPlay()
{
    Super::StartPlay();

    FTransform SpawnLocation;
    SpawnLocation.SetTranslation({-150.0f, 0.0f, 100.0f});
    AEmptyActor* pActor = GetWorld()->SpawnActor<AEmptyActor>(AEmptyActor::StaticClass(), SpawnLocation);
}

3. ÄÄÆ÷³ÍÆ® Ãß°¡

USceneComponent
¾À ÄÄÆ÷³ÍÆ®¸¦ Ãß°¡ ÇÑ´Ù.
±âº» ÄÄÆ÷³ÍÆ®·Î Ãß°¡ ÇÑ´Ù.
   
3°³ÀÇ ±¸¸¦ Àû¿ëÇÑ´Ù.

USphereComponent
Ãæµ¹ ÄÄÆ÷³ÍÆ®¸¦ Àû¿ë ÇÑ´Ù.
ÇÊ¿äÇÑ Çì´õ ÆÄÀÏÀº #include "Components/SphereComponent.h"

UStaticMeshComponent
±¸ ¸Þ½Ã¸¦ Ãâ·Â ÇÑ´Ù.
ÇÊ¿äÇÑ Çì´õ ÆÄÀÏÀº #include "Components/StaticMeshComponent.h"

DrawDebugSphere ÇÔ¼ö
µð¹ö±ë¿ë ±¸¸¦ Ãâ·Â ÇÑ´Ù.
ÇÊ¿äÇÑ Çì´õ ÆÄÀÏÀº #include "Components/DrawDebugHelpers.h"

EmptyActor.cpp ÆÄÀÏ
#include "EmptyActor.h"
#include "Components/SphereComponent.h"
#include "Components/StaticMeshComponent.h"
#include "DrawDebugHelpers.h"
......

AEmptyActor::AEmptyActor(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    PrimaryActorTick.bCanEverTick = true;

    //¾À ÄÄÆ÷³ÍÆ® Ãß°¡
    USceneComponent* SceneComponent = ObjectInitializer.CreateDefaultSubobject<USceneComponent>(this, TEXT("RootComponent"));
    SceneComponent->SetMobility(EComponentMobility::Movable);
    SetRootComponent(SceneComponent);
   
    //±¸ Ãæµ¹ ÄÄÆ÷³ÍÆ®
    USphereComponent* SphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("SphereComponent"));
    SphereComponent->InitSphereRadius(10.0f);
    SphereComponent->SetCollisionProfileName(TEXT("Pawn"));
    SphereComponent->SetupAttachment(RootComponent);

    //±¸½ºÅÂƽ ¸Þ½Ã ÄÄÆ÷³ÍÆ®
    UStaticMeshComponent* MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));
    MeshComponent->SetupAttachment(GetRootComponent());
    static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshComponentAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
    if (MeshComponentAsset.Succeeded())
    {
        MeshComponent->SetStaticMesh(MeshComponentAsset.Object);
        MeshComponent->SetRelativeLocation({ 0.f,0.f, 0.f });
        MeshComponent->SetWorldScale3D(FVector(10.0f*1.0f/50.0f))
    }
}

void AEmptyActor::BeginPlay()
{
    Super::BeginPlay();
   
    UWorld* World = GetWorld();
    if (World)
    {
        float Radius = 10.0f;
        FVector Center = GetActorLocation();
        DrawDebugSphere(World, Center, Radius, 16, FColor(181, 0, 0), true, -1, 0, 1.0f);
    }
}

void AEmptyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
}

½ÇÇàÈ­¸éÀº ´ÙÀ½°ú °°´Ù.

DrawDebugSphere ŹÀÚ ¾Æ·¡¿¡ Á¶±×¸Ä°Ô º¸ÀÌ´Â ¿øÀÌ´Ù.

UStaticMeshComponent ±¸ÀÇ ¹ÝÁö¸§Àº 50ÀÌ´Ù.
¿øÇÏ´Â Radius·Î ¼³Á¤Çϱâ À§Çؼ­´Â 1/50À» °öÇØÁØ´Ù.

MeshComponent->SetWorldScale3D(FVector(10.0f*1.0f/50.0f))



´Ù¿î·Îµå:
EmptyActor.h
EmptyActor.cpp