[UE5] 언리얼 엔진 입문

[언리얼 입문] 4 - Blueprint 시스템의 작동 원리와 한계

지망셍 2025. 6. 2. 19:59

언리얼을 처음 접하면 대부분은 블루프린트부터 시작한다.

시각적인 스크립팅 언어로, 빠르게 기능을 만들 수 있다.

하지만 그 내부에는 어떤 구조가 있고, 한계는 무엇일까?

이번 편에서는 블루프린트의 작동 원리, 엔진 내부 구조, 그리고

C++과의 연결 방식을 초심자 관점에서 풀어본다.


1. 블루프린트란?

  • UObject 또는 AActor를 기반으로 만든 시각적 클래스 확장 도구
  • 에디터 안에서 노드 기반으로 로직을 구성
  • 코드 없이도 복잡한 게임플레이 구현 가능

예:

  • BeginPlay → Delay → Print String
  • Input Action → Jump 실행

2. 내부적으로 어떻게 작동하나?

언리얼은 블루프린트를 C++ 구조 위에서 다음과 같이 처리한다:

  • UCLASS(Blueprintable) → 블루프린트로 확장 가능
  • UFUNCTION(BlueprintCallable) → 블루프린트에서 호출 가능
  • UPROPERTY(BlueprintReadWrite) → 블루프린트에서 접근 가능
UCLASS(Blueprintable)
class UMyObject : public UObject { ... };

UFUNCTION(BlueprintCallable)
void Attack();

UPROPERTY(BlueprintReadOnly)
int32 HP;

블루프린트는 결국 C++ 기반 클래스의 데이터와 함수에 연결된 시각적 Wrapper다


3. Blueprint의 장점

  • 빠른 프로토타이핑 (UI, 상호작용, 연출 등)
  • 실시간 수정과 테스트
  • 기획자, 디자이너와 협업에 유리
  • 시각적 흐름으로 학습 곡선 완화

4. Blueprint의 단점 / 한계

항목 한계

복잡한 로직 시각적 노드가 너무 많아짐
디버깅 로직 추적이 어렵고 느림
형상 관리 Git diff가 불가능 (바이너리 저장)
성능 네이티브 C++보다 느림 (Tick 등 반복 연산에 민감)
확장성 제네릭, 템플릿, 고급 자료구조 사용 불가

5. C++과 블루프린트는 어떻게 연결되는가?

방향 설명

C++ → BP 블루프린트 베이스 클래스 생성 (UCLASS(Blueprintable))
BP → C++ 함수 호출 (UFUNCTION(BlueprintCallable))
이벤트 연결 BlueprintImplementableEvent, BlueprintNativeEvent

예:

UFUNCTION(BlueprintImplementableEvent)
void OnAttackFinished();  // 블루프린트에서 구현

UFUNCTION(BlueprintCallable)
void TakeDamage(int Amount);


6. 실전 설계 팁

  • 블루프린트는 주로 상호작용, 연출, UI 제어에 활용
  • 핵심 로직, 데이터 연산은 C++로 구현
  • “Blueprint Wrapping” 구조: C++ 기능을 외부에서 블루프린트로 쓰게 만들기

마무리하며

블루프린트는 언리얼을 빠르게 체험할 수 있는 최고의 도구다.

하지만 그 아래에 있는 C++ 기반 구조와의 연결을 이해해야

진짜로 확장 가능한 설계를 할 수 있다.

다음 편에서는 언리얼의 C++ 클래스 구조와

어떻게 게임 기능을 코드로 직접 확장할 수 있는지를 살펴본다.