액터 블루프린트의 기본 개념
월드에 배치되는 액터 블루프린트의 구조와 역할을 이해하고 컴포넌트·변수·이벤트를 함께 구성합니다.
이제 블루프린트의 기본적인 요소들을 익히셨으니, 언리얼 엔진에서 게임 월드를 구성하는 핵심적인 단위인 액터(Actor)와 그 액터를 정의하는 액터 블루프린트(Actor Blueprint)에 대해 알아볼 차례입니다.
언리얼 엔진의 모든 게임 오브젝트는 계층적인 구조를 가지고 있으며, 이 구조를 이해하는 것은 효율적인 게임 개발에 필수적입니다.
액터는 위치, 회전, 크기를 가진 월드 오브젝트이고, 액터 블루프린트는 그 오브젝트의 구성 요소와 동작 규칙을 한곳에 묶어 재사용하는 클래스입니다.
- 컴포넌트 구성
Mesh, Collision, Audio처럼 기능 단위를 붙여 액터의 외형과 상호작용 범위를 만듭니다.
- 이벤트 그래프
BeginPlay, Overlap, Input 같은 이벤트에서 상태 변경과 출력 로직을 연결합니다.
- 변수 노출
속도, 체력, 열림 각도처럼 조정 가능한 값을 변수로 빼면 인스턴스별 튜닝이 쉬워집니다.
- 인스턴스 재사용
하나의 설계도를 여러 번 배치하고, 세부 값만 다르게 조정해 제작 속도를 높입니다.
액터란 무엇인가?
액터를 읽을 때는 Transform, Component, Event Graph, Instance 값을 서로 다른 책임으로 나누면 빠르다.
- Transform
위치, 회전, 크기
- Components
Mesh, Collision, Audio
- Event Graph
BeginPlay, Tick, Overlap 반응
- Instance
레벨마다 다른 기본값
| 구분 | 설명 |
|---|---|
| 구조 | 무엇으로 보이는지와 어떤 기능 조각을 가졌는지 확인한다. |
| 행동 | 어떤 이벤트가 그래프 실행을 시작하는지 확인한다. |
| 재사용 | 같은 클래스의 여러 인스턴스가 값만 다르게 배치될 수 있다. |
언리얼 엔진에서 액터(Actor)는 게임 월드에 배치될 수 있는 모든 오브젝트의 기본 클래스입니다.
즉, 게임 화면에 보이고, 움직이고, 상호작용할 수 있는 모든 것들은 액터라고 생각할 수 있습니다.
예를 들어, 플레이어 캐릭터, 적 몬스터, 문, 램프, 바닥, 심지어 게임 월드 자체도 모두 액터입니다.
액터는 3차원 공간상의 위치(Location), 회전(Rotation), 크기(Scale) 정보를 가지며, 게임 플레이 중에 생성되거나 파괴될 수 있습니다.
액터는 단순히 보이는 것 이상의 기능을 수행할 수 있도록 다양한 컴포넌트들을 담는 컨테이너 역할을 합니다.
액터 블루프린트의 역할
그렇다면 액터 블루프린트는 무엇일까요?
이는 우리가 월드에 배치할 액터의 설계도 또는 청사진입니다.
액터 블루프린트는 특정 액터가 어떤 시각적 요소(3D 모델, 파티클 등), 어떤 기능(움직임, 상호작용 등), 그리고 어떤 로직(AI, 이벤트 반응 등)을 가질지 정의합니다.
우리가 1장에서 만들었던 BP_WelcomeMessage 또한 액터 블루프린트의 한 종류였습니다.
이 액터 블루프린트는 Print String이라는 로직을 포함하고 있었고, 우리가 이 액터를 월드에 배치하자 게임 시작 시 메시지가 출력되는 것을 확인할 수 있었죠.
액터 블루프린트가 중요한 이유
액터 블루프린트는 언리얼 엔진에서 다음의 이유로 매우 중요한 역할을 합니다.
재사용성: 한 번 만든 액터 블루프린트는 여러 번 복사하여 게임 월드에 배치할 수 있습니다.
예를 들어, 문 액터 블루프린트를 하나 만들어두면, 게임 내의 모든 문에 동일한 기능(열고 닫기)을 적용할 수 있습니다.
모듈성: 액터는 여러 개의 컴포넌트(Component)로 구성됩니다.
컴포넌트는 액터에 특정 기능이나 속성을 추가하는 독립적인 블록입니다.
예를 들어, Static Mesh Component는 3D 모델을 보여주고, Movement Component는 움직임을 담당합니다.
이러한 모듈 방식 덕분에 필요한 기능만 액터에 추가하여 복잡도를 낮출 수 있습니다.
시각적 개발: 코딩 없이 노드 기반의 비주얼 스크립팅으로 액터의 모든 로직과 기능을 구현할 수 있습니다.
이는 프로그래밍 지식이 없는 개발자나 디자이너도 게임 개발에 적극적으로 참여할 수 있게 합니다.
객체 지향 개념: 액터 블루프린트는 언리얼 엔진의 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 개념을 시각적으로 구현한 것입니다.
각각의 액터 블루프린트는 독립적인 클래스 역할을 하며, 월드에 배치되는 액터들은 그 클래스의 인스턴스(Instance)가 됩니다.
이는 게임 로직을 체계적으로 관리하고 확장하는 데 큰 이점을 제공합니다.
액터 블루프린트의 구성 요소 (복습 및 심화)
1장에서 잠시 언급했던 액터 블루프린트 에디터의 패널들을 액터의 관점에서 다시 살펴보겠습니다.
- 컴포넌트 패널 (Components Panel): 이 액터 블루프린트가 어떤 컴포넌트들을 가지고 있는지 계층 구조로 보여줍니다. 이곳에서 필요한 컴포넌트를 추가, 제거, 재배치하여 액터의 기능을 구성합니다.
- 뷰포트 패널 (Viewport Panel): 액터 블루프린트가 게임 월드에서 어떤 모습으로 보일지 시각적으로 보여줍니다. 컴포넌트들의 위치, 회전, 크기를 이곳에서 직접 조절하며 배치할 수 있습니다.
- 이벤트 그래프 (Event Graph): 이 액터가 어떤 이벤트에 반응하고, 어떤 로직을 수행할지를 정의하는 곳입니다. 플레이어와의 상호작용, 다른 액터와의 충돌, 시간 경과 등 다양한 이벤트에 대한 반응을 이곳에서 노드 기반으로 구현합니다.
- 디테일 패널 (Details Panel): 선택된 액터, 컴포넌트, 또는 노드의 상세 속성을 표시하고 편집합니다. 액터의 기본 속성이나 컴포넌트의 특정 파라미터를 여기서 조정합니다.
- 변수/함수/매크로 패널: 이 액터 블루프린트 내에서 사용될 변수, 함수, 매크로를 정의하고 관리합니다.
액터 블루프린트 점검 기준
첫 액터 블루프린트를 만들 때는 기능을 늘리기 전에 구조를 점검해야 이후 수정 비용이 줄어듭니다.
- 컴포넌트는 "시각 표현"과 "로직 트리거"를 분리해 배치하기
- 이벤트 그래프는 입력, 상태 변경, 출력 순서로 블록을 구획하기
- 디테일 패널에서 조정 가능한 값을 변수로 노출해 재사용성 확보하기
처음 만든 액터 블루프린트는 패널별 역할을 나누어 점검하면 구조가 단단해집니다.
첫 액터를 만들 때는 보이는 컴포넌트, 반응하는 이벤트, 조정 가능한 값이 서로 섞이지 않았는지 확인합니다. 이 구분이 이후 복제와 수정 비용을 크게 줄입니다.
- Components
editor panels 1 Static Mesh, Collision, Audio처럼 액터의 몸체를 구성합니다. 2 컴포넌트의 위치, 회전, 크기를 배치하고 외형을 확인합니다. 3 BeginPlay, 충돌, 입력처럼 실행 흐름을 노드로 연결합니다.
- 보이는 것과 작동하는 것을 분리
visual 보이는 것과 작동하는 것을 분리 시각 표현은 Mesh 계열에 두고, 트리거는 Collision 계열에 둡니다.
- 이벤트 그래프는 흐름 단위로 묶기
logic 이벤트 그래프는 흐름 단위로 묶기 입력, 상태 변경, 결과 출력 순서로 노드를 정리합니다.
- 자주 바꿀 값은 변수로 노출
details 자주 바꿀 값은 변수로 노출 속도, 범위, 메시지 같은 값은 디테일 패널에서 조정하게 둡니다.
- 복제 전에 이름과 역할 확인
reuse 복제 전에 이름과 역할 확인 월드에 여러 번 배치할 액터라면 컴포넌트 이름을 먼저 정리합니다.
액터 블루프린트는 언리얼 엔진 게임의 모든 기능과 콘텐츠를 담아내는 핵심적인 그릇입니다.
이 개념을 명확히 이해하는 것은 복잡한 게임을 효율적으로 개발하기 위한 첫걸음입니다.
다음 절에서는 이 액터에 기능을 부여하는 핵심 요소인 컴포넌트에 대해 더 자세히 알아보겠습니다.
블루프린트 디버그 루틴
블루프린트 노드가 많아질수록 디버그 순서를 고정하는 것이 중요합니다.
- 이벤트 시작 노드에서 실행 경로를 먼저 추적합니다.
- 분기 노드 전후에 상태 값을 출력해 원인 범위를 좁힙니다.
- 노드 추가보다 기존 노드 정리(함수/매크로 분리)를 우선합니다.
클래스 전체 규칙, 배치별 값, 시작 처리, 런타임 반응을 구분하면 컴포넌트와 이벤트 그래프가 뒤섞이지 않습니다.
- 액터 컴포넌트 구성
Components Mesh, Collision, Audio처럼 액터의 몸체와 감지 영역을 조립합니다.
- 초기값 결정 기준
Details 기본 메시, 속도, 콜리전 프리셋을 클래스 또는 인스턴스에서 맞춥니다.
- 인스턴스별 변수 차이
Variables 레벨마다 바꿀 값은 변수로 노출해 복사한 액터도 재사용합니다.
- 언제 반응하는가
Event Graph BeginPlay, 입력, Overlap처럼 실행 타이밍별 노드를 묶습니다.
액터 블루프린트의 책임을 구성 요소별로 나누는 보드를 추가합니다.
문, 아이템, 적처럼 월드에 놓이는 대상은 보이는 구조와 반응 로직을 함께 가진다.
- 보이는 구조
Transform 월드 위치와 회전의 기준점이다. Mesh 플레이어가 보는 외형을 담당한다. Collision 겹침과 클릭, 막힘의 감지 영역이다.
- 동작 책임
Variables 체력, 활성 여부, 점수 같은 상태를 보관한다. Events BeginPlay, Overlap, Input에서 실행이 시작된다. Functions 반복되는 행동을 이름 있는 단위로 묶는다.
| 검수 | 의미 |
|---|---|
| 검수 질문 | 이 액터가 “무엇으로 보이고, 언제 반응하고, 무엇을 기억하는가”를 말할 수 있어야 한다. |
| 분리 기준 | 구성과 행동을 섞어 보지 않으면 수정 지점을 찾기 쉽다. |
액터 블루프린트는 월드에 배치되는 단위이므로 컴포넌트 구성, 상태 변수, 이벤트 로직을 한 화면에서 분리해 봐야 합니다.
같은 블루프린트로 여러 인스턴스를 만들 수 있으므로, 공통 구조와 인스턴스별 값을 구분해야 한다.
- Component set
Mesh, Collision, Audio
- State variables
bOpened, Health, Score
- Event logic
Overlap, Input, Custom Event
- Editable values
인스턴스마다 바꾸는 튜닝 값
| 구분 | 설명 |
|---|---|
| 클래스 | 공통 규칙과 기본 구성을 담는다. |
| 인스턴스 | 레벨 안에 놓인 실제 객체이며 값만 다르게 가질 수 있다. |
| 핵심 | 액터는 그래프 파일이 아니라 월드에 존재하는 실행 단위다. |