2026. 4. 7. 17:29ㆍTIL
언리얼에서 액터는 객체들의 심장이라고 할 수 있다.
이 언리얼 C++에서 액터의 기본을 알아보려고 한다.
액터 (Actor)
언리얼 엔진에서 액터는 레벨 안에 배치하거나 실행 중 생성할 수 있는 기본 오브젝트이다. 월드 안에서 실제로 존재하며 위치를 가지는 하나의 단위라고 볼 수 있다. 플레이어, 적, 아이템, 문, 카메라, 조명처럼 게임 공간에서 놓이는 대부분의 요소는 액터를 기반으로 동작한다.
언리얼의 AActor는 이런 오브젝트를 위한 기본 클래스이며, 월드에 배치되거나 스폰될 수 있는 객체의 출발점 역할을 한다.
이제 이 액터를 언리얼 엔진 내에서 직접 만들어보겠다.
Content Browser -> 우클릭 -> New C++ Class

Actor 선택 후 이름 설정

그럼 라이브 코딩과 함께
Actor.h / Actor.cpp 파일이 생성된다.

MyActor.h

MyActor.cpp

생성하면 자동으로 만들어지는 MyActor 클래스이다.
클래스 이름이 AMyActor?
클래스 이름을 MyActor로 만들었지만 앞에 A가 들어가있다.
이 이유는 언리얼에서는 클래스가 어떤 계열인지 이름만 보고도 알 수 있게 접두어를 붙이는 규칙이 있다.
A는 Actor 계열 클래스를 의미한다. 이 클래스가 AActor를 상속받은 액터 클래스라는 의미이다.
이 외에도
U는 UObject 계열 클래스를 의미한다. 액터처럼 월드에 직접 배치되는 객체라기보다, 언리얼의 기본 객체 시스템을 따르는 클래스에 붙는다.
F는 일반 구조체(Struct)나 데이터 타입에 붙는다. 위치, 색상, 정보 묶음처럼 값을 담는 자료형에 자주 사용된다.
I는 인터페이스를 뜻한다. 이 클래스는 이런 기능을 반드시 구현해야 한다는 약속 역할을 한다.
액터 설정
이제 이 액터를 배치해보자
액터를 배치하면 아웃라이너에 문제 없이 배치되는 것을 확인할 수 있다.

그런데 배치한 액터가 보이지도 않고 위치를 이동시킬 수도 없는 모습을 확인할 수 있었다.

이 이유는 모든 액터는 루트 컴포넌트를 가져야 한다. 루트 컴포넌트는 액터의 트랜스폼을 정의하는 가장 최상위의 컴포넌트이며, 모든 하위 컴포넌트는 이를 기준으로 트랜스폼이 계산된다.
보통 일반적으로 Scene Component를 루트 컴포넌트로 설정하여 액터의 트랜스폼을 관리하고 그 아래에 다양한 컴포넌트를 붙인다.

디테일 창을 보면 역시 루트 컴포넌트가 없는 것을 확인할 수 있다.
이제 이 부분을 만들어보겠다.
루트 컴포넌트 (Scene Component)
먼저 헤더파일에 루트 컴포넌트로 쓸 씬 컴포넌트와, 액터의 모습을 확인할 스태틱 메시 컴포넌트를 각각 만들어준다.

이제 이 부분을 구현해보겠다.

이 코드는 AItem액터가 생성될 때 필요한 컴포넌트를 만드는 부분이다.
먼저 SceneRoot를 생성하고 이를 SetRootComponent로 루트 컴포넌트로 지정해 액터의 기준이 되는 부모 역할을 하도록 설정한다.
그 다음 StaticMeshComp를 생성한 뒤 SceneRoot에 부착하여 실제로 보이는 메시가 루트를 기준으로 함께 움직이도록 구성한다.


이젠 루트 컴포넌트도 생겼고, 트랜스 폼 정보를 갖게 되어 Location도 배치하는 대로 움직이는 것을 확인할 수 있다.
이제 이 액터에 형태를 추가해보려고 한다.
그런데 만들었던 StaticMeshComp가 디테일 창에서 안보이는 것을 확인할 수 있다.
이는 C++로 구현을 했기 때문인데 이를 보이게 하려면 "리플렉션 시스템"에 등록을 해줘야 한다.
루트 컴포넌트로 설정되는 컴포넌트는 반드시 리플렉션 시스템에 등록이 되도록 설계가 되어있기 때문에 루트 컴포넌트는 보이는 것이다.
이 부분은 추후에 배울 내용이므로 다른 방법으로 해보려고 한다.

여기 스태틱 메시의 주소를 복사해서 코드에 붙여넣는다.
그리고 다음과 같은 코드를 적는다.
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Star_B.SM_Star_B"));
지금은 언리얼의 함수들을 다 알지는 못하지만 이 코드는 에셋의 스태틱 메시를 가져오는 코드이다.
그리고 머티리얼도 마찬가지로 위 코드처럼
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Resources/Materials/M_Coin_A.M_Coin_A"));
이렇게 작성해주면 된다.
이 후에 실행하면

정상적으로 액터의 형태가 갖추어진 것을 확인할 수 있다.
'TIL' 카테고리의 다른 글
| [TIL 46일차] <언리얼 C++> 리플렉션 시스템 (2) | 2026.04.09 |
|---|---|
| [TIL 45일차] <언리얼 C++> 액터의 라이프 사이클 (0) | 2026.04.08 |
| Unreal Engine C++ (1) | 2026.03.27 |
| C++ < String > (0) | 2026.03.12 |
| C언어 <math.h> (0) | 2026.03.11 |