Blueprint 시스템 개요
UE5 블루프린트 비주얼 스크립팅 시스템의 구조와 핵심 개념을 이해합니다
블루프린트란 무엇인가
비주얼 스크립팅의 개념과 UE5에서의 역할
블루프린트(Blueprint)는 언리얼 엔진의 비주얼 스크립팅 시스템입니다. 노드 기반 인터페이스를 사용하여 코드를 작성하지 않고도 게임플레이 요소를 만들 수 있습니다. C++ 프로그래밍에서 사용하는 거의 모든 개념과 도구를 블루프린트에서도 활용할 수 있습니다.
블루프린트의 핵심 특징
비주얼 프로그래밍
노드를 드래그 & 드롭하고 와이어로 연결하여 로직을 구성합니다. 실행 흐름(흰색 와이어)과 데이터 흐름(색상별 와이어)을 시각적으로 확인할 수 있습니다.
실시간 미리보기
에디터에서 바로 결과를 확인할 수 있습니다. PIE(Play In Editor) 중에도 블루프린트를 수정하고 핫 리로드할 수 있습니다.
C++ 통합
C++ 클래스를 블루프린트로 확장하거나, 블루프린트에서 C++ 함수를 호출할 수 있습니다. 두 시스템은 완전히 상호 운용 가능합니다.
블루프린트 비주얼 스크립팅 시스템은 언리얼 에디터 내에서 노드 기반 인터페이스를 사용하여 게임플레이 요소를 만드는 완전한 게임플레이 스크립팅 시스템입니다. 이 시스템은 디자이너와 아티스트가 일반적으로 프로그래머만 사용할 수 있는 광범위한 스크립팅 개념과 도구를 사용할 수 있게 해줍니다.
블루프린트 vs C++ 비교
| 항목 | 블루프린트 | C++ |
|---|---|---|
| 학습 난이도 | 낮음 (비주얼) | 높음 (텍스트) |
| 실행 성능 | VM 해석 실행 (~10배 느림) | 네이티브 컴파일 |
| 이터레이션 속도 | 즉시 (핫 리로드) | 컴파일 필요 |
| 디버깅 | 시각적 디버깅, 와이어 애니메이션 | IDE 디버거, 중단점 |
| 적합한 용도 | 프로토타이핑, 게임플레이 로직, UI | 엔진 확장, 성능 크리티컬 코드 |
블루프린트의 종류
목적에 따라 다양한 블루프린트 타입을 사용합니다
주요 블루프린트 타입
1. Blueprint Class (블루프린트 클래스)
가장 일반적인 블루프린트입니다. Actor를 기반으로 새로운 클래스를 정의하며,
컴포넌트를 추가하고 로직을 구현합니다. 콘텐츠 브라우저에서
우클릭 > Blueprint Class로 생성합니다.
생성 시 부모 클래스를 선택해야 합니다. 일반적으로 Actor, Pawn, Character, PlayerController, GameModeBase 중에서 선택합니다. All Classes를 펼치면 모든 C++ 클래스가 표시됩니다.
2. Level Blueprint (레벨 블루프린트)
각 레벨(맵)마다 하나씩 존재하는 특수한 블루프린트입니다.
레벨 내 Actor 참조, 레벨 시퀀스 트리거, 레벨 스트리밍 등
레벨에 특화된 이벤트를 처리합니다.
툴바의 Blueprints > Open Level Blueprint에서 접근합니다.
3. Blueprint Interface (블루프린트 인터페이스)
구현부 없이 함수 시그니처만 정의합니다. 여러 블루프린트에서 공통으로 구현할 함수를 약속하는 계약(contract)입니다. C++의 순수 가상 함수(pure virtual function)와 유사합니다.
4. Blueprint Macro Library (매크로 라이브러리)
여러 블루프린트에서 재사용할 수 있는 매크로 모음입니다. 매크로는 노드 그래프를 하나의 노드로 축약한 것으로, 컴파일 시 인라인으로 펼쳐집니다.
5. Blueprint Function Library (함수 라이브러리)
정적(static) 유틸리티 함수를 모아놓은 블루프린트입니다. 특정 오브젝트 컨텍스트 없이 어디서든 호출할 수 있습니다.
| 타입 | 인스턴스화 | 그래프 타입 | 주요 용도 |
|---|---|---|---|
| Blueprint Class | 월드에 배치 가능 | 이벤트 그래프, 함수, 매크로 | 게임 오브젝트 정의 |
| Level Blueprint | 레벨당 1개 (자동) | 이벤트 그래프 | 레벨별 스크립팅 |
| BP Interface | 불가 (시그니처만) | 함수 시그니처 | 다형성 통신 |
| Macro Library | 불가 (인라인 확장) | 매크로 | 재사용 가능 로직 |
| Function Library | 불가 (정적 함수) | 함수 | 유틸리티 함수 |
블루프린트 에디터 인터페이스
에디터의 주요 패널과 사용법을 익힙니다
블루프린트 에디터는 클래스를 더블클릭하면 열리는 전용 편집 환경입니다. 주요 패널을 살펴보겠습니다.
주요 패널 구성
Components 패널 (좌측 상단)
블루프린트에 포함된 컴포넌트의 계층 구조를 보여줍니다.
Add 버튼으로 Static Mesh, Skeletal Mesh, Camera, Collision, Audio 등
다양한 컴포넌트를 추가할 수 있습니다. 최상위에는 항상 DefaultSceneRoot가 있습니다.
My Blueprint 패널 (좌측 하단)
현재 블루프린트에 정의된 모든 요소를 트리 형태로 보여줍니다:
- Graphs: EventGraph, 사용자 정의 그래프
- Functions: 사용자 정의 함수
- Macros: 사용자 정의 매크로
- Variables: 변수 목록
- Event Dispatchers: 이벤트 디스패처
Graph Editor (중앙)
노드를 배치하고 연결하는 핵심 작업 영역입니다. 빈 공간을 우클릭하면 노드 검색 메뉴가 열립니다. Context Sensitive 체크박스가 활성화되어 있으면 현재 문맥에 맞는 노드만 필터링됩니다.
Details 패널 (우측)
선택한 노드, 변수, 컴포넌트의 속성을 편집합니다. 변수를 선택하면 타입, 기본값, 복제(Replication) 설정 등을 변경할 수 있습니다.
핵심 단축키:
우클릭— 노드 검색 메뉴 열기C— Comment Box 생성B + 좌클릭— Branch 노드 생성S + 좌클릭— Sequence 노드 생성D + 좌클릭— Delay 노드 생성F— 선택 노드에 포커스Ctrl+W— 선택 노드 복제F7— 컴파일
Viewport (뷰포트) 모드
블루프린트 에디터 상단의 탭으로 전환합니다. Viewport 탭에서는 컴포넌트의 3D 배치를 시각적으로 편집하고, Event Graph 탭에서는 노드 그래프를 편집합니다. Construction Script 탭에서는 Actor가 월드에 배치/이동될 때 실행되는 로직을 작성합니다.
노드의 기본 구조
블루프린트 노드의 구성 요소와 와이어 연결을 이해합니다
노드의 구성 요소
모든 블루프린트 노드는 다음 요소로 구성됩니다:
// 노드의 기본 구조
▶ Exec In [노드 타이틀 바] Exec Out ▶
┌──────────────────────┐
Input Pin 1 ○──┤ Print String ├──○ Output Pin
Input Pin 2 ○──┤ │
└──────────────────────┘
// 핀 색상별 타입:
흰색 (Exec) = 실행 흐름 (Execution wire)
빨강 (Boolean) = True / False
초록 (Float) = 부동소수점 숫자
청록 (Integer) = 정수
분홍 (String) = 문자열
노랑 (Vector) = FVector (X, Y, Z)
파랑 (Object) = 오브젝트 참조
와이어(Wire) 연결 규칙
실행 와이어 (Exec Wire)
흰색 와이어로 노드 간 실행 순서를 결정합니다. 좌측의 실행 입력 핀에서 우측의 실행 출력 핀으로 연결합니다. 실행 흐름이 없는 노드(Pure 노드)는 실행 핀이 없습니다.
데이터 와이어 (Data Wire)
색상별 와이어로 데이터를 전달합니다. 출력 핀(우측)에서 입력 핀(좌측)으로 연결합니다. 같은 타입끼리만 연결 가능하며, 일부 타입은 자동 변환됩니다.
노드의 종류
| 노드 종류 | 타이틀 바 색상 | 실행 핀 | 설명 |
|---|---|---|---|
| Event | 빨간색 | 출력만 | 이벤트 발생 시 실행 시작 (BeginPlay, Tick 등) |
| Function Call | 파란색 | 입출력 모두 | 함수 호출 (Print String, SetActorLocation 등) |
| Pure Function | 녹색 (가늘게) | 없음 | 부작용 없는 값 반환 (Get, 수학 연산 등) |
| Flow Control | 회색 | 입출력 모두 | 흐름 제어 (Branch, ForEachLoop, Sequence 등) |
| Variable | — | Get: 없음 / Set: 있음 | 변수 읽기(Get) 및 쓰기(Set) |
Pure 노드(실행 핀이 없는 노드)는 연결된 곳마다 매번 재평가됩니다. 비용이 큰 Pure 함수를 여러 곳에 연결하면 성능 문제가 발생할 수 있습니다. 이 경우 결과를 로컬 변수에 저장(Promote to Variable)한 후 사용하세요.
첫 번째 블루프린트 만들기
가장 기본적인 "Hello World" 블루프린트를 만들어봅시다:
// Event BeginPlay -> Print String
[Event BeginPlay] ──exec──> [Print String]
├─ In String: "Hello, Blueprint!"
├─ Print to Screen: True
└─ Text Color: (0, 0.66, 1, 1)
Event BeginPlay는 게임이 시작되거나 Actor가 스폰될 때 한 번 실행됩니다. 이 이벤트의 실행 출력 핀을 Print String 노드의 실행 입력 핀에 연결하면, 게임 시작 시 화면에 "Hello, Blueprint!" 메시지가 표시됩니다.
핵심 요약
- 블루프린트는 UE5의 노드 기반 비주얼 스크립팅 시스템으로, C++ 없이도 게임플레이 로직을 구현할 수 있다
- Blueprint Class, Level Blueprint, Interface, Macro Library, Function Library 5가지 주요 타입이 있다
- 블루프린트 에디터는 Components, My Blueprint, Graph Editor, Details 4개의 주요 패널로 구성된다
- 노드는 실행 핀(Exec)과 데이터 핀(Data)으로 구성되며, 와이어로 연결하여 로직을 구성한다
- Pure 노드는 실행 핀이 없고 연결될 때마다 재평가되므로, 비용이 큰 연산은 변수에 캐싱하여 사용한다
- 블루프린트는 C++보다 약 10배 느리지만, 프로토타이핑과 게임플레이 로직에는 충분한 성능을 제공한다
도전 과제
배운 내용을 직접 실습해보세요
새 Actor Blueprint Class를 생성하고, Event BeginPlay에서 Print String 노드를 연결하여 "Hello, Blueprint!"를 화면에 출력하세요. Text Color를 변경하고, Duration을 5초로 설정해보세요.
Blueprint Class(Actor 기반), Blueprint Interface, Blueprint Macro Library를 각각 하나씩 생성하세요. Blueprint Class에 Static Mesh Component를 추가하고 레벨에 배치하여 동작을 확인하세요.
Construction Script를 사용하여 Actor가 레벨에 배치될 때 자동으로 랜덤 위치에 Static Mesh를 배치하는 블루프린트를 만들어보세요. Add Static Mesh Component 노드와 Random Float in Range를 활용합니다.