Static Mesh Component 추가하기

김민수·2025년 1월 21일

언리얼 C++

목록 보기
8/32

1. 컴포넌트

컴포넌트(Component)는 Actor가 특정 속성을 가지거나 역할을 수행하도록 만들어주는 부품 개념이다.

  • Actor는 컴포넌트들의 집합체다. Actor에 컴포넌트를 조합해서 다양한 기능을 구현할 수 있다.
  • 예를 들어:
    • Static Mesh Component로 3D 모델을 표시하고,
    • Audio Component로 소리를 재생하며,
    • Collision Component로 충돌 이벤트를 처리할 수 있다.

2. 루트 컴포넌트

모든 Actor는 Root Component라는 최상위 컴포넌트를 가져야 한다.

  • Root Component 역할
    1. Actor의 트랜스폼(위치, 회전, 크기)을 정의한다.
    2. 모든 하위 컴포넌트는 Root Component를 기준으로 동작한다.

3. Scene Component

  • Scene Component는 트랜스폼(위치, 회전, 크기) 속성을 가지는 기본 컴포넌트다.
  • Scene Component 자체는 시각적 출력(3D 모델, 빛 등)을 가지지 않지만, 다른 컴포넌트들의 기준점 역할을 한다.
  • 일반적으로 Actor의 Root Component로 설정된다.

💡 트랜스폼 계층 구조
Scene Component를 Root로 설정한 뒤, Static Mesh와 같은 하위 컴포넌트를 Attach하면, 하위 컴포넌트는 Root Component의 트랜스폼을 따라간다.


4. Static Mesh Component

Static Mesh Component는 3D 모델(Static Mesh)을 화면에 표시하고 물리 충돌 관련 기능을 제공하는 컴포넌트다.

  • 정적(Static): 애니메이션이 없는 고정된 3D 모델이다.
  • 주로 건물, 아이템, 바위 같은 움직임이 없는 오브젝트를 표현할 때 사용된다.

5. 언리얼 C++ 코드로 Static Mesh Component 추가하기

Item.h

#pragma once

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

UCLASS()
class SPARTAPROJECT_API AItem : public AActor
{
    GENERATED_BODY()

public:	
    // 생성자
    AItem();

protected:
    // 루트 컴포넌트를 나타내는 Scene Component
    USceneComponent* SceneRoot;

    // Static Mesh를 표시할 Static Mesh Component
    UStaticMeshComponent* StaticMeshComp;
};

Item.cpp

#include "Item.h"

AItem::AItem()
{
    // 1. Scene Component 생성 및 루트로 설정
    SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
    SetRootComponent(SceneRoot);

    // 2. Static Mesh Component 생성 및 Scene Component에 부착
    StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
    StaticMeshComp->SetupAttachment(SceneRoot);
}

(1) Scene Component

  • USceneComponent* SceneRoot :
    • 루트 컴포넌트로 설정된 논리적 컴포넌트
    • 시각적으로 표시되지 않으며, 다른 하위 컴포넌트의 기준점 역할을 한다.

(2) Static Mesh Component

  • UStaticMeshComponent* StaticMeshComp :
    • Static Mesh를 화면에 표시하고, 물리 충돌과 관련된 기능을 제공한다.

(3) 컴포넌트 생성

SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
  • CreateDefaultSubobject<T>() :
    • Actor에 컴포넌트를 생성하고 초기화하는 함수
    • <T>는 생성할 컴포넌트의 유형이다.
    • TEXT("이름")은 이 컴포넌트를 식별하기 위한 이름이다.

(4) 컴포넌트 계층 구조 설정

SetRootComponent(SceneRoot);
StaticMeshComp->SetupAttachment(SceneRoot);
  • SetRootComponent(SceneRoot) :
    • Actor의 Root Component를 SceneRoot로 설정한다.
  • SetupAttachment(SceneRoot) :
    • StaticMeshComp를 SceneRoot의 하위 컴포넌트로 부착(Attach)한다.
    • 하위 컴포넌트는 Root Component의 트랜스폼(위치, 회전, 크기)을 따라간다.
profile
안녕하세요

0개의 댓글