언리얼 엔진의 비주얼 스크립팅 시스템인 Blueprint (블루프린트)는 언리얼 에디터 안에서 노드 기반 인터페이스를 사용하여 게임플레이 요소를 만드는 개념을 토대로 한 비주얼 스크립팅 시스템입니다. 일반적인 스크립팅 언어와 마찬가지로, 엔진 내 객체 지향형(OO) 클래스 또는 오브젝트를 정의하는 데 사용됩니다. 언리얼을 사용하다 보면, 블루프린트를 사용하여 정의된 오브젝트를 그냥 일상적으로 "블루프린트" 라 하는 경우가 많습니다.
이 시스템은 매우 유연하고 강력해서, 보통은 프로그래머가 없으면 힘들었던 개념 구현이나 툴 작업 거의 전부를 디자이너 스스로 해낼 수 있게 되었습니다. 게다가, 언리얼 엔진의 C++ 구현에서 가능한 블루프린트 전용 마크업을 통해 프로그래머가 어떤 기반 시스템을 제작하면, 디자이너가 그것을 확장하는 것도 가능합니다.
블루프린트가 언리얼 스크립트를 대체한다는 뜻일까요? 맞기도 하고 아니기도 합니다. 게임플레이 프로그래밍을 비롯하여 과거에 언리얼 스크립트를 사용했던 모든 것은 여전히 C++ 를 사용하여 코드를 통해 처리할 수 있습니다. 동시에, 블루프린트가 언리얼 스크립트를 대체하지는 않더라도 다음과 같이 언리얼 스크립트의 역할과 대다수 동일한 역할을 합니다.
- 클래스 확장
- 디폴트 프로퍼티 저장 및 수정
- 클래스에 대한 서브오브젝트(예: 컴포넌트) 인스턴싱 관리
블루프린트에 기대하는 바는 게임플레이 프로그래머가 유용한 함수와 프로퍼티 세트를 노출하는 베이스 클래스를 구성하여, 이러한 베이스 클래스로 만든 블루프린트에서 해당 함수와 프로퍼티를 사용하고 확장하도록 하는 것입니다.
아래 표는 언리얼 스크립트(언리얼 엔진 3), C++, 블루프린트에서 다양한 요소가 어떻게 처리되는지 비교하여 기존 버전의 엔진에서 전환한 경우에 도움이 될 뿐만 아니라 네이티브 코드와 블루프린트의 차이점도 보여줍니다.
언리얼 스크립트(UE3) | 블루프린트(UE5) | C++(UE5) |
---|---|---|
.uc 파일 | 블루프린트 에셋 | .h/.cpp 파일 |
UClass | UBlueprintGeneratedClass | UClass |
extends [클래스명] | ParentClass | : [클래스명] |
변수 | 변수 | UProperty() |
함수 | 그래프/이벤트 | UFunction() |
defaultproperties{} | 클래스 디폴트 | 네이티브 생성자 |
디폴트 컴포넌트 | 컴포넌트 목록 | 네이티브 생성자 |
블루프린트 타입
블루프린트는 새 타입 생성부터 레벨 이벤트 스크립팅, 다른 블루프린트에서 사용할 인터페이스나 매크로를 정의하는 것까지, 각각 특정한 용도가 있는 몇 가지 타입 중 하나가 될 수 있습니다.
블루프린트 클래스
Blueprint Class (블루프린트 클래스), 종종 그냥 Blueprint (블루프린트)는 콘텐츠 제작자가 기존의 클래스 위에 다른 함수성을 쉽게 추가할 수 있도록 해 주는 애셋입니다. 블루프린트는 언리얼 에디터 안에서 코드 작성 방식이 아닌 시각적인 방식으로 생성되며, 콘텐츠 패키지에 애셋으로 저장됩니다. 이는 본질적으로 새로운 클래스 또는 액터 유형을 정의하는 것으로, 나중에 이 블루프린트를 맵에 인스턴스로 배치하면 다른 액터 유형처럼 작동합니다.
데이터 전용 블루프린트
Data-Only Blueprint (데이터 전용 블루프린트)는 그 부모에서 상속받은 코드, 변수, (노드 그래프 형태의) 코드만 들어있는 블루프린트 클래스 입니다. 이를 통해 상속받은 프로퍼티를 조정하거나 변경할 수는 있어도, 요소를 새로 추가할 수는 없습니다. 이는 본질적으로 아키타입을 대체하는 것이며, 이를 통해 디자이너는 프로퍼티를 조정하거나 항목 다변화가 가능합니다.
데이터 전용 블루프린트의 편집은 간결한 프로퍼티 에디터를 통해 가능하며, 간단히 코드, 변수, 컴포넌트를 추가해서 풀 블루프린트로 변환시켜 블루프린트 에디터 에서 편집할 수도 있습니다.
자세한 내용은 클래스 블루프린트 문서를 참조하세요.
Level Blueprint (레벨 블루프린트)란 레벨 단위 글로벌 이벤트 그래프 역할을 하는 특수한 형태의 블루프린트 입니다. 프로젝트 내 각 레벨에는 기본적으로 자체적인 레벨 블루프린트가 있어 언리얼 에디터 안에서 편집할 수 있으나, 에디터 인터페이스를 통해 새로운 레벨 블루프린트를 생성할 수는 없습니다.
레벨 전체적으로 관련된 이벤트 또는 레벨 내 특정 액터 인스턴스가 함수 호출이나 흐름 제어 연산 형태로 일련의 동작을 발동시키는 데 사용됩니다. 언리얼 엔진 3 에 익숙하신 분들이라면 그 키즈멧 작동 방식과 매우 유사한 이런 개념에 금방 익숙해 지실 수 있을 것입니다.
레벨 블루프린트는 레벨 스트리밍과 시퀀서 를 제어할 수도 있으며, 레벨에 놓인 액터에 이벤트를 바인딩할 수도 있습니다.
자세한 내용은 레벨 블루프린트 문서를 참조하세요.
블루프린트 인터페이스
Blueprint Interface (블루프린트 인터페이스)는 이름만 있고 구현은 없는 함수 하나 이상으로 된 집합으로, 이를 다른 블루프린트에 추가할 수 있습니다. 블루프린트에 인터페이스를 추가하면 그 블루프린트는 그 안에 들어있는 함수를 갖게 됩니다. 인터페이스의 함수에는 그것을 추가한 각각의 블루프린트에 함수성을 줄 수 있습니다. 이는 본질상 일반 프로그래밍의 인터페이스 개념과 비슷한데, 각기 다른 다수의 오브젝트가 모두 공통의 인터페이스를 통해 접근할 수 있게 되는 것입니다. 간단히 말해서, 블루프린트 인터페이스를 통해 다양한 블루프린트는 서로간에 데이터를 공유하고 전송할 수 있습니다.
블루프린트 인터페이스는 콘텐츠 제작자가 에디터에서 다른 블루프린트와 비슷한 방식으로 만들 수 있습니다만, 다음과 같은 작업이 불가능하다는 점에서 차이가 있습니다:
- 새 변수 추가
- 그래프 편집
- 컴포넌트 추가
자세한 내용은 블루프린트 인터페이스 및 인터페이스 퀵스타트 가이드 문서를 참조하세요.
블루프린트 매크로 라이브러리
Blueprint Macro Library (블루프린트 매크로 라이브러리)란 다른 블루프린트 에 넣어 사용할 수 있는 매크로 또는 독립된 그래프 모음을 담는 그릇입니다. 자주 사용되는 노드 시퀀스를 실행과 데이터 전송을 위한 입력과 출력까지 그대로 포함시켜 저장할 수 있으니, 시간을 절약할 수 있습니다.
매크로 는 자신을 참조하는 모든 그래프에 공유되지만, 컴파일 도중에는 마치 접혀있던 노드인양 원래 그래프로 자동 펼쳐집니다. 즉 블루프린트 매크로 라이브러리 는 컴파일할 필요가 없지만, 매크로 에 가한 변경내용은 그 그래프를 포함하는 블루프린트 가 리컴파일될 때 해당 매크로 를 참조하는 그래프에만 반영됩니다.
자세한 내용은 매크로 라이브러리 및 매크로 만들기 문서를 참조하세요.
블루프린트 유틸리티
블루프린트 유틸리티(Blueprint Utility) (또는 줄여서 블루틸리티(Blutility) )는 에디터 액션을 수행하거나 에디터 함수 기능을 확장하는 데 사용할 수 있는 에디터 전용 블루프린트입니다. 블루프린트 유틸리티는 이벤트를 파라미터 없이 UI에 버튼으로 노출하며, 블루프린트 에 노출된 함수를 실행하여 뷰포트에서 현재 선택된 액터 세트에 동작하도록 하는 기능이 있습니다.
블루프린트 구조
블루프린트의 함수 기능은 다양한 요소로 정의됩니다. 일부는 기본적으로 제공되며, 일부는 필요에 따라 추가할 수 있습니다. 이러한 요소들은 컴포넌트 정의, 초기화 및 구성 연산 수행, 이벤트에 대한 반응, 연산 체계화 및 모듈화, 프로퍼티 정의 등의 기능을 제공합니다.
컴포넌트 창
컴포넌트에 대해 이해해 두면, 블루프린트 에디터 안의 컴포넌트 창을 통해 블루프린트에 컴포넌트를 추가시킬 수 있습니다.
이는 CapsuleComponents
, BoxComponents
, SphereComponents
를 통해 콜리전 지오메트리를 추가하거나, StaticMeshComponents
, SkeletalMeshComponents
형태의 렌더링되는 지오메트리를 추가하거나, MovementComponents
를 사용해서 운동을 제어할 수 있는 수단이 됩니다. 컴포넌트 리스트에 추가된 컴포넌트는 인스턴스 변수에 할당시켜 이 블루프린트 나 다른 블루프린트 에서 접근하도록 할 수도 있습니다.
컨스트럭션 스크립트
Construction Script (컨스트럭션 스크립트)는 블루프린트 클래스의 인스턴스 생성시 컴포넌트 리스트 다음에 실행되는 부분입니다. 여기에는 노드 그래프가 들어있어 블루프린트 클래스 인스턴스에서 초기화 작업을 할 수 있습니다. 이는 월드로의 트레이스, 메시와 머티리얼 설정 등의 작업을 컨텍스트에 따라 이루어지도록 구성할 수 있는 매우 강력한 기능입니다. 예를 들어 라이트 블루프린트는 어떤 종류의 바닥에 놓이는가에 따라 지정된 메시 중에서 올바른 메시를 선택하도록 할 수도 있고, 펜스 블루프린트의 경우 각 방향으로 트레이스 작업을 하여 펜스 길이를 얼마나 길게 할 것인지를 결정할 수도 있습니다.
이벤트 그래프
블루프린트의 이벤트그래프에는 이벤트와 함수 호출을 사용하여 블루프린트와 연관된 게임플레이 이벤트에 반응하는 액션을 수행하는 노드 그래프가 포함되어 있습니다. 이는 한 블루프린트의 모든 인스턴스에 공통된 함수 기능을 추가하는 데 사용되며,
여기서 상호작용성과 동적 반응이 구성됩니다. 예를 들어 라이트 블루프린트는 LightComponent
를 끄고 메시에 사용되는 머티리얼을 변경하는 식으로 대미지 이벤트에 반응할 수 있습니다.
그러면 해당 라이트 블루프린트의 모든 인스턴스에 이 비헤이비어가 자동으로 제공됩니다.
자세한 내용은 이벤트 그래프 문서를 참조하세요.
기능
Function (함수)는 Blueprint 내 다른 그래프에서 실행 또는 호출 가능한 특정 Blueprint 에 속하는 노드 그래프입니다. 함수에는 하나의 입력부가 있는데, 실행 출력 핀이 하나 있는 함수 이름으로 된 노드로 표시됩니다. 이 함수가 다른 그래프에서 호출되면, 그 출력 실행 핀을 활성화시켜 연결된 네트워크가 실행되도록 합니다.
변수
변수(Variables) 는 값을 가지거나 월드 내 오브젝트나 액터를 참조하는 프로퍼티입니다. 이러한 프로퍼티는 내부적으로는 해당 프로퍼티가 포함된 블루프린트(Blueprint) 에서 액세스 가능하며, 외부적으로 액세스 가능하도록 만들어 레벨에 배치된 블루프린트의 인스턴스로 작업하는 디자이너가 해당 값을 변경할 수도 있습니다.