레벨 블루프린트와의 상호작용
레벨 블루프린트에서 배치 액터를 참조해 레벨 전용 이벤트를 연결하고 사용 범위와 결합도 한계를 이해합니다.
지금까지는 액터 블루프린트 간 통신 기법을 살펴봤습니다.
여기에 더해, 특정 레벨(맵)에 종속되어 동작하는 특별한 블루프린트가 바로 레벨 블루프린트(Level Blueprint)입니다.
이번 절에서는 레벨 블루프린트의 역할과 액터 블루프린트와의 상호작용 방식을 정리합니다.
레벨 블루프린트는 현재 맵에 배치된 액터 인스턴스와 이벤트를 다루는 레벨 전용 스크립트입니다.
- 직접 참조
뷰포트에서 선택한 배치 액터의 인스턴스 참조를 쉽게 만들 수 있습니다. reference
- 레벨 이벤트
시작 컷신, 특정 영역 진입, 퍼즐 트리거처럼 맵 고유 사건에 맞습니다. event
- 빠른 구현
스위치를 밟으면 특정 문이 열리는 식의 명확한 인스턴스 연결에 유리합니다. prototype
- 결합 위험
액터가 삭제되거나 이름이 바뀌면 참조가 깨질 수 있습니다. coupling
레벨 블루프린트란 무엇인가?
레벨 고유 트리거, 시퀀스, 조명, 카메라처럼 맵을 떠나면 의미가 없는 로직만 남긴다.
- Level BP에 맞는 일
Level trigger 특정 맵의 문, 컷신, 스폰 지점 Sequence 레벨 전용 카메라와 조명 연출 One-off setup 이 맵에서만 필요한 초기 연결
- 다른 곳으로 빼야 할 일
Actor behavior 재사용할 문, 아이템, 적 로직 UI state 위젯 표시와 입력 처리 Game state 레벨을 넘어 유지되는 진행 값
| 검수 | 의미 |
|---|---|
| 판정 | 이 로직이 다른 맵에서도 필요하면 Level BP가 아니다. |
| 위험 | Level BP가 커질수록 재사용과 테스트가 어려워진다. |
레벨 블루프린트는 현재 로드된 특정 레벨에만 존재하는 블루프린트입니다.
각 레벨(맵 파일)은 자신만의 고유한 레벨 블루프린트를 가지며, 이 블루프린트는 해당 레벨에 배치된 액터들, 또는 레벨 자체에서 발생하는 이벤트에 반응하는 로직을 구현하는 데 사용됩니다.
레벨 블루프린트의 주요 특징은 다음과 같습니다.
- 레벨 종속성: 레벨 블루프린트는 해당 레벨 파일에 저장되며, 다른 레벨에서는 사용할 수 없습니다. 레벨을 변경하면 이전 레벨의 레벨 블루프린트는 메모리에서 해제됩니다.
- 특정 인스턴스에 대한 쉬운 참조: 레벨 블루프린트에서 가장 강력한 기능 중 하나는 현재 레벨에 배치된 특정 액터 인스턴스에 대한 직접적인 참조(Direct Reference)를 매우 쉽게 얻을 수 있다는 것입니다.
- 레벨 단위의 이벤트 처리: 레벨의 시작/종료, 특정 영역 진입/이탈, 특정 시퀀스 재생 등 레벨 전체에 걸쳐 발생하는 이벤트를 처리하는 데 적합합니다.
- 컴포넌트 추가 불가: 액터 블루프린트와 달리 레벨 블루프린트에는 컴포넌트를 추가할 수 없습니다.
레벨 블루프린트 열기
레벨 블루프린트는 메인 언리얼 에디터 툴바에서 접근할 수 있습니다.
언리얼 에디터 상단의 블루프린트(Blueprints) 드롭다운 메뉴를 클릭합니다.
레벨 블루프린트 열기(Open Level Blueprint)를 선택합니다.
- 그러면 현재 레벨에 해당하는 레벨 블루프린트 에디터가 열립니다.
레벨 블루프린트에서 액터 참조 및 통신
레벨 블루프린트는 해당 레벨에 배치된 액터 인스턴스와 직접 통신하는 데 가장 효율적인 방법 중 하나입니다.
레벨에 액터 배치: 게임 월드에 통신하고 싶은 액터 블루프린트(예: BP_Door) 인스턴스를 배치합니다.
- 메인 에디터의 뷰포트(Viewport)나 월드 아웃라이너(World Outliner)에서 통신하고 싶은 특정 액터 인스턴스를 선택합니다. (예: 월드에 배치된
BP_Door인스턴스) - 레벨 블루프린트 에디터로 돌아와서 이벤트 그래프의 빈 공간에 마우스 오른쪽 버튼을 클릭합니다.
- 컨텍스트 메뉴를 살펴보면, 선택된 액터에 대한
Create a Reference to [ActorName]옵션이 나타납니다. (예:Reference to BP_Door) 이를 클릭하여 해당 액터 인스턴스에 대한 직접 참조 노드를 생성합니다.- 이것은 뷰포트에서 액터를 선택하고 레벨 블루프린트에서 우클릭하는 것만으로 해당 액터의 인스턴스 변수(Reference Variable)를 만든 것과 같습니다. 매우 편리하죠!
- 생성된 액터 참조 노드의 출력 핀에서 드래그하여 해당 액터 블루프린트가 가진 함수나 변수에 접근할 수 있습니다.
-
예시: 특정 스위치로 문 열기
- 월드에
BP_Door와BP_Switch라는 액터 블루프린트가 배치되어 있다고 가정합니다. - 레벨 블루프린트에서
BP_Switch액터 인스턴스와BP_Door액터 인스턴스에 대한 참조 노드를 생성합니다. BP_Switch참조 노드에서OnComponentBeginOverlap이벤트(BP_Switch에 콜리전 컴포넌트가 있고, 해당 이벤트가 활성화되어 있을 경우)를 추가합니다.- 이 이벤트의 실행 핀 뒤에
Branch노드를 연결하여Other Actor가 플레이어 캐릭터인지 확인합니다. Branch노드의True실행 핀 뒤에BP_Door참조 노드에서 드래그하여OpenDoor함수(BP_Door에 정의된 함수)를 호출합니다.- 이렇게 하면 플레이어가 스위치에 닿으면 해당 레벨의 특정 문이 열리도록 설정할 수 있습니다.
- 월드에
레벨 블루프린트의 장점과 단점
장점- 쉬운 인스턴스 참조: 특정 레벨에 배치된 액터 인스턴스에 대한 직접적인 참조를 매우 쉽게 얻을 수 있어, 레벨 스크립팅에 최적화되어 있습니다.
- 간단한 레벨 스크립팅: 특정 레벨에서만 필요한 간단한 이벤트나 시퀀스 로직을 빠르게 구현할 수 있습니다.
- 레벨 중심의 이벤트 처리: 레벨 로딩/언로딩, 월드 경계 진입 등 레벨 자체와 관련된 이벤트를 처리하는 데 효과적입니다.
- 재사용성 부족: 레벨 블루프린트의 로직은 해당 레벨에만 존재하므로, 다른 레벨에서 동일한 기능을 구현하려면 다시 만들어야 합니다. 이는 반복 작업을 초래합니다.
- 강한 결합: 레벨 블루프린트가 특정 액터 인스턴스에 직접적으로 종속되므로, 해당 액터를 삭제하거나 변경하면 레벨 블루프린트의 참조가 깨질 수 있습니다.
- 복잡도 증가: 너무 많은 로직을 레벨 블루프린트에 구현하면 그래프가 복잡해지고 관리하기 어려워집니다. 이는 특히 대규모 프로젝트에서 문제가 될 수 있습니다.
- 클래스 아님: 레벨 블루프린트는 액터 클래스가 아니므로, 다른 블루프린트가 레벨 블루프린트 자체를 참조하여 함수를 호출하거나 변수에 접근하기 어렵습니다. (일반적인
Get All Actors Of Class같은 노드로는 찾을 수 없습니다.)
레벨 블루프린트는 현재 맵에 놓인 특정 액터를 즉시 다루기 좋습니다. 대신 로직이 맵 파일에 묶이므로 반복될 순간부터 분리 기준을 먼저 세워야 합니다.
- 질문 레벨 블루프린트
유리한 경우 분리 신호
- 참조 대상 월드 아웃라이너에 놓인 BP_Door 같
특정 한 개 스폰되거나 교체되는 액터, 여러 타입의 수신자
- 로직 범위 해당 맵의 컷신
퍼즐, 문 열림처럼 레벨 전용 사건 다음 맵에도 복사할 가능성이 있는 규칙
- 유지보수 노드 몇 개
끝나고 변경 지점이 한 화면에 보임 참조가 자주 깨지거나 그래프가 기능별로 뒤섞임
언제 레벨 블루프린트를 사용해야 하는가?
레벨 블루프린트는 다음과 같은 상황에서 사용하는 것이 가장 적합합니다.
- 특정 레벨에서만 발생하는 고유한 이벤트: 예를 들어, 특정 레벨의 시작 시 컷신 재생, 특정 퍼즐의 작동 방식, 해당 레벨에서만 등장하는 보스전 페이즈 전환 등.
- 레벨에 배치된 소수의 특정 액터 간 상호작용: 예를 들어, 이 레벨의 이 스위치를 누르면, 저기 있는 이 문이 열린다와 같이 명확하게 지정된 인스턴스 간의 통신.
- 빠른 프로토타이핑: 특정 레벨의 기능을 빠르게 테스트하거나 구현해야 할 때.
반면, 게임 전반에 걸쳐 재사용되어야 하는 기능, 동적으로 생성/파괴되는 액터의 로직, 또는 유연한 통신이 필요한 복잡한 시스템은 액터 블루프린트, 게임 인스턴스, 블루프린트 인터페이스, 이벤트 디스패처 등을 활용하여 구현하는 것이 훨씬 효율적이고 유지보수가 용이합니다.
레벨 블루프린트는 어디까지나 현재 레벨의 스크립트라는 점을 명심해야 합니다.
다음 다이어그램은 레벨 블루프린트에 둘 로직과 재사용 가능한 블루프린트로 빼야 할 로직을 나누는 기준입니다.
레벨 블루프린트는 배치된 인스턴스를 빠르게 연결하는 도구이며, 재사용 시스템의 본체가 되기에는 적합하지 않습니다.
- 레벨에 둔다
one level 해당 맵에서만 시작되는 연출과 순서 제어 이미 배치된 인스턴스끼리의 단순 연결 기능 검증을 위한 임시 테스트 흐름
- 고유 컷신
해당 맵에서만 시작되는 연출과 순서 제어
- 특정 문과 스위치
미 배치된 인스턴스끼리의 단순 연결
- 빠른 프로토타입
기능 검증을 위한 임시 테스트 흐름
- 블루프린트로 뺀다
reusable 맵이 바뀌어도 같은 규칙으로 동작하는 장치 런타임에 생성되어 레벨 참조가 불안정한 대상 인터페이스, 디스패처, 컴포넌트가 필요한 흐름
- 여러 레벨 반복
맵이 바뀌어도 같은 규칙으로 동작하는 장치
- 동적 생성 액터
런타임에 생성되어 레벨 참조가 불안정한 대상
- 복잡한 시스템
인터페이스, 디스패처, 컴포넌트가 필요한 흐름
마지막으로 레벨 블루프린트에 직접 참조를 만들기 전에 아래 점검표로 범위를 확인해 보세요.
레벨 블루프린트에서 액터를 바로 잡아 쓰기 전에, 이 연결이 현재 맵에만 묶여도 되는지 먼저 확인합니다.
- 맵 전용 규칙인가
범위 이 퍼즐, 이 컷신, 이 문처럼 해당 레벨에서만 의미가 있는 이벤트인지 확인합니다.
- 배치 액터가 고정인가
instance 월드 아웃라이너에서 선택할 수 있는 인스턴스이며 런타임 생성 대상이 아닌지 봅니다.
- 참조 깨짐을 감당하는가
change 액터 삭제, 이름 변경, 레벨 복제 때 그래프를 다시 점검할 수 있는 규모인지 판단합니다.
이번 절에서는 레벨 블루프린트의 기본 개념, 액터와의 상호작용 방법, 그리고 장단점에 대해 알아보았습니다.
이제는 언리얼 엔진에서 블루프린트 간의 통신을 위한 다양한 도구들을 이해하게 되었습니다.
어떤 상황에서 어떤 통신 기법을 선택해야 할지 판단하는 것은 개발자의 경험과 설계 역량에 달려 있습니다.
이로써 4장 블루프린트 통신 기법의 모든 내용을 마쳤습니다.
특정 레벨에 놓인 문, 스위치, 시퀀스처럼 맵 고유 연출은 레벨 블루프린트에서 빠르게 연결할 수 있습니다.
- 현재 레벨 전용 로직
맵 범위 다른 레벨로 넘어가면 해당 레벨 블루프린트의 상태와 참조도 함께 사라집니다. Select 뷰포트나 아웃라이너에서 특정 인스턴스를 고릅니다. Reference 레벨 블루프린트 그래프에 선택한 액터 참조 노드를 만듭니다. Connect 스위치 Overlap 뒤에 문 OpenDoor 같은 호출을 이어 붙입니다. Refactor 여러 레벨에서 반복되면 액터 블루프린트나 컴포넌트로 옮깁니다.
- 현재 레벨 전용 로직
맵 범위 다른 레벨로 넘어가면 해당 레벨 블루프린트의 상태와 참조도 함께 사라집니다.
- 월드 액터 선택
Select 뷰포트나 아웃라이너에서 특정 인스턴스를 고릅니다.
- Create Reference
Reference 레벨 블루프린트 그래프에 선택한 액터 참조 노드를 만듭니다.
- 이벤트와 함수 연결
Connect 스위치 Overlap 뒤에 문 OpenDoor 같은 호출을 이어 붙입니다.
- 재사용 로직 분리
Refactor 여러 레벨에서 반복되면 액터 블루프린트나 컴포넌트로 옮깁니다.
레벨 블루프린트에 남길 로직과 분리할 로직을 나누는 기준을 추가합니다.
Actor를 직접 조종하기보다 “이 맵에서 언제 연결되는가”만 드러나야 한다.
| 질문 | 판정 |
|---|---|
| 특정 레벨 배치물인가? | Level BP에서 연결해도 된다. |
| 동일 로직을 여러 맵에서 쓰나? | Actor Blueprint나 Function으로 옮긴다. |
| UI나 Player 상태를 바꾸나? | Controller, Widget, GameInstance 경계를 검토한다. |
| 테스트가 어려운가? | 레벨 의존을 줄이고 이벤트/인터페이스로 분리한다. |
레벨 블루프린트는 특정 맵의 이벤트와 배치 액터를 다루기 쉬운 대신 재사용성이 낮으므로 사용 범위를 좁혀야 합니다.
레벨이 언로드되면 Level BP도 함께 사라지므로 저장, UI, 재사용 로직을 오래 붙잡으면 안 된다.
- Map event
트리거, 문 열림, 레벨 시퀀스 Level BP 가능
- Reusable actor
문, 스위치, 아이템 행동 Actor BP로 이동
- Persistent state
선택 캐릭터, 난이도, 진행도 GameInstance/SaveGame
| 선택 기준 | 의미 |
|---|---|
| 유지 기준 | 맵을 떠나도 필요한 값은 Level BP 밖으로 뺀다. |
| 검수 질문 | 이 그래프가 다른 레벨 파일에도 복사될 것 같으면 경계가 틀렸다. |