분기와 반복
Branch, Switch, ForEach, WhileLoop 등 블루프린트의 흐름 제어 노드를 마스터합니다
Branch (조건 분기)
Boolean 조건에 따른 실행 경로 분기
Branch 노드는 프로그래밍의 if-else에 해당합니다. 단축키 B + 좌클릭으로 빠르게 생성할 수 있습니다.
// Branch 노드 구조
[Branch]
├─ Exec In (실행 입력)
├─ Condition (Boolean 입력)
├─ True (실행 출력 - 조건이 참일 때)
└─ False (실행 출력 - 조건이 거짓일 때)
// 예시: 체력 확인 후 사망 처리
[Get Health] ──> [<= (Float)] ──> [Branch]
└─ B: 0.0 ├──True──> [Die]
└──False──> [Update HUD]
다중 조건: Branch 체이닝
여러 조건을 순차적으로 검사하려면 Branch를 연쇄적으로 연결합니다 (if / else if / else 패턴).
// 등급별 처리 (if / else if / else)
[Branch: Score >= 90] ──True──> [Set Grade "A"]
└──False──> [Branch: Score >= 80] ──True──> [Set Grade "B"]
└──False──> [Branch: Score >= 70] ──True──> [Set Grade "C"]
└──False──> [Set Grade "F"]
단순히 Boolean에 따라 값만 선택하려면 Select 노드를 사용하세요. Condition ? A : B(삼항 연산자)와 동일합니다. Pure 노드이므로 실행 핀이 없습니다.
Switch (다중 분기)
하나의 값에 따라 여러 경로로 분기합니다
Switch on Int / String / Name / Enum
Switch 노드는 하나의 입력값에 따라 여러 실행 경로를 제공합니다.
switch-case 문에 해당합니다.
| 노드 | 입력 타입 | 사용 예시 |
|---|---|---|
| Switch on Int | Integer | 레벨 번호별 처리, 상태 코드 |
| Switch on String | String | 명령어 파싱, 이름 기반 분기 |
| Switch on Name | FName | 태그 기반 처리, 소켓 이름 |
| Switch on Enum | 사용자 정의 Enum | 상태 머신, 아이템 종류 분기 |
// Enum: E_WeaponType (Sword, Bow, Staff, Shield)
[Get Weapon Type] ──> [Switch on E_WeaponType]
├─ Sword ──> [Play Melee Montage]
├─ Bow ──> [Spawn Projectile]
├─ Staff ──> [Cast Spell]
├─ Shield ──> [Activate Block]
└─ Default ──> [Print "Unknown"]
// Add pin 버튼으로 케이스를 추가
// Default 핀: 어떤 케이스에도 해당하지 않을 때 실행
가능하면 Switch on Int보다 Switch on Enum을 사용하세요. Enum은 값의 의미가 명확하고, 새 항목 추가 시 Switch 노드에 자동으로 핀이 추가됩니다. 또한 컴파일러가 누락된 케이스를 경고해줍니다.
반복문 (Loop)
ForEachLoop, ForLoop, WhileLoop 활용
ForEachLoop
배열의 모든 요소를 순회합니다. 가장 자주 사용되는 반복 노드입니다.
// ForEachLoop 노드 구조
[ForEachLoop]
├─ Exec In
├─ Array (순회할 배열)
├─ Loop Body (각 요소마다 실행)
│ ├─ Array Element (현재 요소)
│ └─ Array Index (현재 인덱스)
└─ Completed (루프 종료 후 실행)
// 예시: 모든 적에게 데미지 적용
[Get All Enemies] ──> [ForEachLoop]
├─ Loop Body ──> [Apply Damage]
│ ├─ Target: Array Element
│ └─ Damage: 50.0
└─ Completed ──> [Print "All damaged"]
ForEachLoopWithBreak
조건을 만족하면 루프를 중단할 수 있는 변형입니다. Break 실행 핀에 연결하면 해당 시점에서 루프가 종료됩니다.
ForLoop (인덱스 반복)
// ForLoop: 정수 범위 반복
[ForLoop]
├─ First Index: 0
├─ Last Index: 9
├─ Loop Body ──> (Index 핀으로 현재 인덱스 사용)
└─ Completed
// 예시: 10개 아이템 슬롯 초기화
[ForLoop (0 to 9)] ──Loop Body──> [Set Array Elem]
├─ Target Array: InventorySlots
├─ Index: Index
└─ Item: EmptySlot
WhileLoop
// WhileLoop: 조건이 참인 동안 반복
[WhileLoop]
├─ Condition (Boolean - 매 반복마다 평가)
├─ Loop Body (조건이 참이면 실행)
└─ Completed (조건이 거짓이 되면 실행)
// 주의: 무한 루프 방지를 위해 조건을 반드시 변화시켜야 함!
WhileLoop에서 조건을 변화시키지 않으면 에디터가 멈춥니다. UE5는 블루프린트 무한 루프를 감지하면 일정 시간 후 자동으로 중단하지만, 이 과정에서 에디터가 응답하지 않을 수 있습니다. WhileLoop 대신 ForLoop이나 ForEachLoop을 우선 고려하세요.
Sequence, FlipFlop, DoOnce
실행 흐름을 제어하는 유용한 유틸리티 노드
Sequence
하나의 실행 입력을 여러 출력으로 순차 분배합니다. 단축키 S + 좌클릭.
각 출력 핀의 체인이 완전히 끝난 뒤 다음 핀이 실행됩니다.
[Event BeginPlay] ──> [Sequence]
├─ Then 0 ──> [Initialize Variables]
├─ Then 1 ──> [Setup UI]
├─ Then 2 ──> [Spawn Enemies]
└─ Then 3 ──> [Play BGM]
// Add pin 으로 출력 핀 추가 가능
// Then 0이 완전히 끝나면 Then 1 실행, Then 1이 끝나면 Then 2...
FlipFlop
호출할 때마다 A와 B를 번갈아 실행합니다. 토글 동작에 적합합니다.
// 문 열기/닫기 토글
[InputAction Interact] ──> [FlipFlop]
├─ A ──> [Open Door] (Is A: True)
└─ B ──> [Close Door] (Is A: False)
DoOnce
최초 1회만 실행하고 이후 호출은 무시합니다. Reset 입력 핀으로 초기화 가능합니다.
// 보물 상자: 한 번만 열기
[InputAction Interact] ──> [DoOnce] ──> [Open Chest]
├─ Play Animation
├─ Spawn Loot
└─ Play Sound
// 리셋이 필요한 경우:
[OnLevelReset] ──> [DoOnce].Reset
DoN
N번까지만 실행합니다. N, Counter 값을 확인할 수 있고, Reset으로 초기화합니다.
Gate
Open/Close 상태에 따라 실행을 허용/차단합니다. Toggle로 상태를 전환할 수 있습니다.
// Gate: 능력 사용 가능 여부 제어
[Event Tick] ──> [Gate] ──> [Regenerate Mana]
[On Stunned] ──> Gate.Close // 스턴 시 재생 중단
[On Recover] ──> Gate.Open // 회복 시 재생 재개
Sequence: 여러 작업을 순서대로 정리할 때 (이벤트 그래프 정리에 특히 유용)
FlipFlop: 토글 동작 (켜기/끄기, 열기/닫기)
DoOnce: 1회성 이벤트 (보물 상자, 첫 만남 대화)
DoN: 제한된 횟수 (탄약 소모, 부활 횟수)
Gate: 조건부 실행 허용/차단 (버프/디버프 상태)
핵심 요약
- Branch(B+클릭)는 Boolean 조건에 따른 if/else 분기를 수행한다
- Switch on Enum은 정수 Switch보다 가독성과 안전성이 뛰어나 권장된다
- ForEachLoop으로 배열 순회, ForLoop으로 인덱스 범위 반복, WhileLoop으로 조건 반복을 수행한다
- WhileLoop에서 조건 변화가 없으면 에디터가 멈출 수 있다
- Sequence(S+클릭)로 여러 실행 경로를 깔끔하게 정리할 수 있다
- FlipFlop, DoOnce, DoN, Gate는 게임플레이에서 자주 사용되는 흐름 제어 패턴이다
도전 과제
배운 내용을 직접 실습해보세요
Integer 변수 Score(0~100)를 기반으로 Branch와 Switch on Int를 사용하여 등급(S/A/B/C/D/F)을 판정하는 그래프를 만드세요. 각 등급에 따라 다른 색상의 Print String을 출력하세요.
String 배열에 10개의 아이템 이름을 저장하고, ForEachLoop로 순회하면서 특정 조건(이름 길이가 5 이상)을 만족하는 아이템만 새 배열에 추가하세요. WhileLoop로 배열에서 랜덤 아이템을 하나 뽑는 가챠 시스템을 만들어보세요.
Sequence 노드와 FlipFlop을 조합하여 토글 가능한 라이트 시스템을 구현하세요. 3개의 PointLight를 순차적으로 켜고 끄며, DoOnce와 Gate를 사용하여 한 번만 실행되는 보물 상자 개봉 로직도 구현해보세요.