Unreal Game Objects Actors Components

소개 (Introduction)

Unreal Engine에서 게임을 구성하는 기본 단위는 게임 오브젝트입니다. 게임 오브젝트는 액터와 컴포넌트로 구성되며, 이들을 통해 게임의 다양한 요소와 기능을 구현할 수 있습니다. 이 장에서는 게임 오브젝트의 개념, 액터의 역할, 컴포넌트의 종류 및 사용법에 대해 자세히 설명합니다.

게임 오브젝트 (Game Objects)

개념 (Concept)
게임 오브젝트는 게임 내에서 존재하고 상호작용하는 모든 요소를 나타냅니다. 캐릭터, 무기, 환경 요소 등 모든 것은 게임 오브젝트입니다. Unreal Engine에서는 게임 오브젝트를 액터와 컴포넌트로 구체화합니다.

액터 (Actors)

개념 (Concept)
액터는 게임 오브젝트의 기본 단위로, 레벨 내에서 존재하고 상호작용하는 모든 물체를 나타냅니다. 액터는 위치, 회전, 스케일 정보를 가지며, 다양한 컴포넌트를 포함할 수 있습니다. 액터는 Blueprint 또는 C++로 구현할 수 있습니다.

액터의 종류 (Types of Actors)

  • Static Mesh Actor: 정적 메쉬를 나타내는 액터로, 주로 환경 요소로 사용됩니다.
  • Character: 플레이어나 NPC와 같은 움직이는 캐릭터를 나타냅니다.
  • Pawn: 플레이어나 AI가 조종할 수 있는 객체를 나타냅니다.
  • Camera Actor: 씬을 렌더링하는 카메라를 나타냅니다.
  • Light Actor: 씬에 조명을 추가하는 라이트를 나타냅니다.

액터 생성 및 사용 (Creating and Using Actors)
액터를 생성하고 사용하는 방법은 다음과 같습니다:

  1. Blueprint로 액터 생성:
    1. Content Browser에서 ‘Add New’를 클릭하고 ‘Blueprint Class’를 선택합니다.
    2. ‘Actor’를 부모 클래스로 선택하여 새로운 Blueprint를 생성합니다.
    3. Blueprint Editor에서 컴포넌트를 추가하고, 액터의 동작을 정의합니다.
  2. C++로 액터 생성:
    1. Content Browser에서 ‘Add New’를 클릭하고 ‘C++ Class’를 선택합니다.
    2. ‘Actor’를 부모 클래스로 선택하여 새로운 C++ 클래스를 생성합니다.
    3. Visual Studio에서 생성된 클래스의 헤더 파일과 소스 파일을 열어, 액터의 속성 및 동작을 정의합니다.

예제 (Example)

// MyActor.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
    GENERATED_BODY()

public:    
    // Sets default values for this actor's properties
    AMyActor();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public:    
    // Called every frame
    virtual void Tick(float DeltaTime) override;
};

// MyActor.cpp
#include "MyActor.h"

AMyActor::AMyActor()
{
    PrimaryActorTick.bCanEverTick = true;
}

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

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

컴포넌트 (Components)

개념 (Concept)
컴포넌트는 액터에 부착되어 특정 기능을 제공하는 모듈입니다. 컴포넌트를 사용하여 액터에 다양한 속성 및 동작을 추가할 수 있습니다. 예를 들어, 메쉬 컴포넌트를 추가하여 시각적 표현을 제공하거나, 콜리전 컴포넌트를 추가하여 물리적 상호작용을 정의할 수 있습니다.

컴포넌트의 종류 (Types of Components)

  • Static Mesh Component: 정적 메쉬를 렌더링하는 컴포넌트입니다.
  • Skeletal Mesh Component: 골격 애니메이션을 지원하는 메쉬 컴포넌트입니다.
  • Camera Component: 액터에 카메라 기능을 추가하는 컴포넌트입니다.
  • Light Component: 액터에 조명 기능을 추가하는 컴포넌트입니다.
  • Collision Component: 액터에 물리적 충돌을 정의하는 컴포넌트입니다.

컴포넌트 추가 및 사용 (Adding and Using Components)
컴포넌트를 액터에 추가하고 사용하는 방법은 다음과 같습니다:

  1. Blueprint로 컴포넌트 추가:
    1. Blueprint Editor에서 ‘Add Component’ 버튼을 클릭합니다.
    2. 원하는 컴포넌트를 선택하여 액터에 추가합니다.
    3. ‘Details’ 패널에서 컴포넌트의 속성을 설정합니다.
  2. C++로 컴포넌트 추가:
    1. 생성된 액터 클래스의 헤더 파일에서 컴포넌트를 선언합니다.
    2. 생성자에서 컴포넌트를 초기화하고 액터에 부착합니다.

예제 (Example)

// MyActor.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Components/StaticMeshComponent.h"
#include "MyActor.generated.h"

UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
    GENERATED_BODY()

public:    
    // Sets default values for this actor's properties
    AMyActor();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public:    
    // Called every frame
    virtual void Tick(float DeltaTime) override;

    // Static Mesh Component
    UPROPERTY(VisibleAnywhere)
    UStaticMeshComponent* MyMesh;
};

// MyActor.cpp
#include "MyActor.h"

AMyActor::AMyActor()
{
    PrimaryActorTick.bCanEverTick = true;

    // Create and attach the static mesh component
    MyMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyMesh"));
    RootComponent = MyMesh;
}

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

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

정리 (Summary)

게임 오브젝트, 액터, 컴포넌트는 Unreal Engine에서 게임을 구성하는 기본 요소입니다. 액터는 게임 세계 내의 모든 물체를 나타내며, 컴포넌트는 액터에 특정 기능을 부여합니다. Blueprint와 C++를 사용하여 다양한 액터와 컴포넌트를 생성하고, 이를 통해 복잡하고 풍부한 게임 환경을 구현할 수 있습니다. 위의 예제들을 통해 게임 오브젝트, 액터, 컴포넌트를 효과적으로 사용하는 방법을 익힐 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *