PART 2 · 강의 1/3

분기와 반복

Branch, Switch, ForEach, WhileLoop 등 블루프린트의 흐름 제어 노드를 마스터합니다

01

Branch (조건 분기)

Boolean 조건에 따른 실행 경로 분기

Branch 노드는 프로그래밍의 if-else에 해당합니다. 단축키 B + 좌클릭으로 빠르게 생성할 수 있습니다.

Branch Node // 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 패턴).

Chained Branch // 등급별 처리 (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"]
단축 표현: Select 노드

단순히 Boolean에 따라 값만 선택하려면 Select 노드를 사용하세요. Condition ? A : B(삼항 연산자)와 동일합니다. Pure 노드이므로 실행 핀이 없습니다.

02

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 상태 머신, 아이템 종류 분기
Switch on Enum Example // 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 핀: 어떤 케이스에도 해당하지 않을 때 실행
Enum Switch 권장

가능하면 Switch on Int보다 Switch on Enum을 사용하세요. Enum은 값의 의미가 명확하고, 새 항목 추가 시 Switch 노드에 자동으로 핀이 추가됩니다. 또한 컴파일러가 누락된 케이스를 경고해줍니다.

03

반복문 (Loop)

ForEachLoop, ForLoop, WhileLoop 활용

ForEachLoop

배열의 모든 요소를 순회합니다. 가장 자주 사용되는 반복 노드입니다.

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: 정수 범위 반복 [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: 조건이 참인 동안 반복 [WhileLoop] ├─ Condition (Boolean - 매 반복마다 평가) ├─ Loop Body (조건이 참이면 실행) └─ Completed (조건이 거짓이 되면 실행) // 주의: 무한 루프 방지를 위해 조건을 반드시 변화시켜야 함!
무한 루프 주의

WhileLoop에서 조건을 변화시키지 않으면 에디터가 멈춥니다. UE5는 블루프린트 무한 루프를 감지하면 일정 시간 후 자동으로 중단하지만, 이 과정에서 에디터가 응답하지 않을 수 있습니다. WhileLoop 대신 ForLoop이나 ForEachLoop을 우선 고려하세요.

04

Sequence, FlipFlop, DoOnce

실행 흐름을 제어하는 유용한 유틸리티 노드

Sequence

하나의 실행 입력을 여러 출력으로 순차 분배합니다. 단축키 S + 좌클릭. 각 출력 핀의 체인이 완전히 끝난 뒤 다음 핀이 실행됩니다.

Sequence Node [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를 번갈아 실행합니다. 토글 동작에 적합합니다.

FlipFlop Example // 문 열기/닫기 토글 [InputAction Interact] ──> [FlipFlop] ├─ A ──> [Open Door] (Is A: True) └─ B ──> [Close Door] (Is A: False)

DoOnce

최초 1회만 실행하고 이후 호출은 무시합니다. Reset 입력 핀으로 초기화 가능합니다.

DoOnce Example // 보물 상자: 한 번만 열기 [InputAction Interact] ──> [DoOnce] ──> [Open Chest] ├─ Play Animation ├─ Spawn Loot └─ Play Sound // 리셋이 필요한 경우: [OnLevelReset] ──> [DoOnce].Reset

DoN

N번까지만 실행합니다. N, Counter 값을 확인할 수 있고, Reset으로 초기화합니다.

Gate

Open/Close 상태에 따라 실행을 허용/차단합니다. Toggle로 상태를 전환할 수 있습니다.

Gate Example // Gate: 능력 사용 가능 여부 제어 [Event Tick] ──> [Gate] ──> [Regenerate Mana] [On Stunned] ──> Gate.Close // 스턴 시 재생 중단 [On Recover] ──> Gate.Open // 회복 시 재생 재개
흐름 제어 노드 정리

Sequence: 여러 작업을 순서대로 정리할 때 (이벤트 그래프 정리에 특히 유용)
FlipFlop: 토글 동작 (켜기/끄기, 열기/닫기)
DoOnce: 1회성 이벤트 (보물 상자, 첫 만남 대화)
DoN: 제한된 횟수 (탄약 소모, 부활 횟수)
Gate: 조건부 실행 허용/차단 (버프/디버프 상태)

SUMMARY

핵심 요약

  • Branch(B+클릭)는 Boolean 조건에 따른 if/else 분기를 수행한다
  • Switch on Enum은 정수 Switch보다 가독성과 안전성이 뛰어나 권장된다
  • ForEachLoop으로 배열 순회, ForLoop으로 인덱스 범위 반복, WhileLoop으로 조건 반복을 수행한다
  • WhileLoop에서 조건 변화가 없으면 에디터가 멈출 수 있다
  • Sequence(S+클릭)로 여러 실행 경로를 깔끔하게 정리할 수 있다
  • FlipFlop, DoOnce, DoN, Gate는 게임플레이에서 자주 사용되는 흐름 제어 패턴이다
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 등급 판정 시스템 구현

Integer 변수 Score(0~100)를 기반으로 Branch와 Switch on Int를 사용하여 등급(S/A/B/C/D/F)을 판정하는 그래프를 만드세요. 각 등급에 따라 다른 색상의 Print String을 출력하세요.

실습 2: 배열 순회와 필터링

String 배열에 10개의 아이템 이름을 저장하고, ForEachLoop로 순회하면서 특정 조건(이름 길이가 5 이상)을 만족하는 아이템만 새 배열에 추가하세요. WhileLoop로 배열에서 랜덤 아이템을 하나 뽑는 가챠 시스템을 만들어보세요.

심화 과제

Sequence 노드와 FlipFlop을 조합하여 토글 가능한 라이트 시스템을 구현하세요. 3개의 PointLight를 순차적으로 켜고 끄며, DoOnce와 Gate를 사용하여 한 번만 실행되는 보물 상자 개봉 로직도 구현해보세요.