본문으로 건너뛰기

안동민 개발노트

본문 시작

흐름 제어 노드 (분기, 루프) 사용법

Branch와 Sequence, For Loop·For Each Loop의 실행 방식을 익혀 조건과 반복이 있는 그래프를 구성합니다.

지금까지 변수를 통해 데이터를 저장하고, 함수와 이벤트를 통해 특정 작업을 수행하는 방법을 알아보았습니다.

하지만 게임 로직은 단순히 순서대로 실행되는 것만을 의미하지 않습니다.

특정 조건에 따라 다른 행동을 하거나, 특정 작업을 여러 번 반복해야 하는 경우가 훨씬 많습니다.

이때 필요한 것이 바로 흐름 제어 노드(Flow Control)입니다.

흐름 제어 노드는 블루프린트의 실행 흐름을 원하는 대로 조작하고 분기하며 반복시키는 역할을 합니다.

마치 도로의 신호등이나 갈림길처럼, 프로그램이 나아갈 길을 결정하고 통제하는 핵심적인 요소입니다.


조건에 따른 분기: Branch 노드

Branch (브랜치) 노드는 가장 기본적인 흐름 제어 노드이며, 특정 조건(Condition)이 참(True)인지 거짓(False)인지에 따라 실행 흐름을 두 갈래로 나눕니다.

마치 "만약 ~라면 A를 하고, 그렇지 않다면 B를 하라"는 지시를 내리는 것과 같습니다.

  • 구조
    • 실행 입력 핀 (Execution Input Pin): 브랜치 노드의 실행을 시작합니다.
    • 조건 입력 핀 (Condition Input Pin): 불리언(Boolean) 타입의 값을 받습니다. 이 값이 True이면 True 출력 핀으로 실행 흐름을 넘기고, False이면 False 출력 핀으로 넘깁니다.
    • True 실행 출력 핀: 조건이 참일 때 실행될 다음 노드로 연결합니다.
    • False 실행 출력 핀: 조건이 거짓일 때 실행될 다음 노드로 연결합니다.
  • 활용 예시 플레이어의 체력이 0보다 큰지 확인하여 살아있는지 여부를 판단하는 로직을 가정해봅시다.

    Event AnyDamage (액터가 대미지를 받을 때 발생하는 이벤트) 노드에서 실행 핀을 드래그하여 Branch 노드를 추가합니다.

    Get CurrentHealth (플레이어의 현재 체력을 가져오는 변수 또는 함수) 노드를 추가하고, 그 출력 값을 Integer > Integer 노드(더 큰지 비교하는 노드)의 첫 번째 입력 핀에 연결합니다.

    Integer > Integer 노드의 두 번째 입력 핀에는 0을 입력합니다.

    Integer > Integer 노드의 불리언 출력 핀을 Branch 노드의 Condition입력 핀에 연결합니다.

    Branch 노드의 True 출력 핀에는 Print String 노드를 연결하여 플레이어 생존! 메시지를 출력합니다.

    Branch 노드의 False 출력 핀에는 Print String 노드를 연결하여 게임 오버! 메시지를 출력합니다.

    이 연결은 현재 체력을 검사할 뿐, Damage만큼 차감하는 Set 로직은 포함하지 않습니다. 체력을 갱신한 뒤의 판정이 목적이면 차감과 저장을 먼저 구현해야 합니다. AnyDamage는 권한 측에서 실행되므로 네트워크 플레이에서는 서버의 실행을 관찰합니다.


실행 순서와 통과 횟수 제어

때로는 단지 참/거짓으로 나누는 것 이상으로 복잡한 흐름 제어가 필요합니다.

  • Sequence 노드
    • 개념: 하나의 실행 입력 핀을 받아 여러 개의 실행 출력 핀을 순차적으로 실행합니다. 첫 경로의 동기 실행이 돌아오면 다음 출력으로 진행합니다. Delay나 비동기 작업을 시작했다고 그 작업이 끝날 때까지 다음 출력을 기다리지는 않습니다.
    • 활용 예시: 오브젝트를 활성화한 후, 효과음을 재생하고, 이펙트를 출력하라와 같이 여러 독립적인 작업을 정해진 순서대로 실행해야 할 때 유용합니다.
  • Do N 노드
    • 개념: 입력된 실행 핀을 N번만 실행하고 그 이후로는 더 이상 실행되지 않습니다. N은 설정 가능한 정수 값입니다.
    • 활용 예시: 적 몬스터가 최대 3번만 특정 스킬을 사용하게 하라.와 같이 특정 동작의 실행 횟수를 제한할 때 사용됩니다. Reset 핀을 통해 횟수를 초기화할 수도 있습니다.
  • Do Once 노드
    • 개념: Do N 노드의 특수한 형태로, 입력된 실행 핀을 단 한 번만 실행합니다. Do N에서 N을 1로 설정한 것과 같습니다.
    • 활용 예시: 문이 처음 열릴 때만 잠금 해제 사운드를 재생하라.와 같이 특정 이벤트가 한 번만 발생해야 할 때 유용합니다. Reset 핀을 통해 초기화하여 다시 한 번 실행되도록 할 수도 있습니다.
  • Gate 노드
    • 개념: 문처럼 작동하여, 특정 조건을 만족할 때만 실행 흐름을 통과시킵니다. Open, Close, Toggle 입력 핀을 통해 문을 열고 닫을 수 있으며, Enter 핀으로 들어온 실행 흐름이 문이 열려 있을 때만 Exit 핀으로 나갑니다.
    • 활용 예시: 플레이어가 특정 지역에 있을 때만 버튼이 작동하도록 하라.와 같이 특정 상태에서만 동작이 허용될 때 사용됩니다.

반복적인 실행: Loop 노드

반복은 특정 작업을 여러 번 수행해야 할 때 사용됩니다.

  • For Loop 노드
    • 개념: 지정된 횟수만큼 반복 작업을 수행합니다. First Index부터 Last Index까지 숫자를 세어가며 Loop Body를 반복 실행합니다.
    • 구조
      • 실행 입력 핀: 루프를 시작합니다.
      • First Index (정수): 루프가 시작될 인덱스 값 (보통 0).
      • Last Index (정수): 루프가 끝날 인덱스 값. 이 값까지 포함하여 반복합니다.
      • Loop Body (실행 출력 핀): 각 반복마다 실행되는 로직입니다.
      • Index (정수 출력 핀): 현재 반복 횟수(인덱스)를 반환합니다.
      • Completed (실행 출력 핀): 모든 반복이 완료된 후 실행되는 핀입니다.
    • 활용 예시: 인벤토리에 있는 10개의 아이템을 모두 활성화하라. 또는 배열의 모든 요소에 대해 작업을 수행하라.
  • For Each Loop 노드:

    • 개념: 연결한 배열(Array)의 요소를 차례로 처리합니다. 각 반복마다 배열의 다음 요소를 가져와서 작업을 수행할 수 있습니다.
    • 구조
      • 실행 입력 핀: 루프를 시작합니다.
      • Array (배열 입력 핀): 반복할 배열을 연결합니다.
      • Loop Body (실행 출력 핀): 각 배열 요소에 대해 실행되는 로직입니다.
      • Array Element (출력 핀): 현재 반복에서 처리 중인 배열의 요소 값입니다.
      • Index (정수 출력 핀): 현재 처리 중인 배열 요소의 인덱스입니다.
      • Completed (실행 출력 핀): 모든 반복이 완료된 후 실행되는 핀입니다.
    • 활용 예시: 모든 적 몬스터에게 대미지를 입혀라. (적 몬스터 목록이 배열로 있을 경우)

반복 전체를 실행할지 고르는 조건은 Loop 앞에, 각 요소의 처리 여부를 고르는 조건은 Loop Body 뒤에 Branch로 둡니다. 인덱스 0부터 2까지 처리하는 작은 예로 두 실행 출력의 역할을 구분합니다.

반복마다 실행할 일과 완료 후 실행할 일을 나눕니다

반복마다 실행할 일과 완료 후 실행할 일을 나눕니다

For Loop의 서로 다른 실행 출력First Index 0 Last Index 2에서 Loop Body는 Index 0, 1, 2로 세 번 실행되고 Completed는 반복 종료 후 한 번 실행된다. 두 출력은 다른 후속 노드로 연결된다.Loop Body · 각 반복Completed · 반복 종료 후For LoopFirst Index = 0Last Index = 2Index로 처리0, 1, 2 → 세 번전체 결과 정리완료 후 한 번
For Loop의 서로 다른 실행 출력First Index 0 Last Index 2에서 Loop Body는 Index 0, 1, 2로 세 번 실행되고 Completed는 반복 종료 후 한 번 실행된다. 두 출력은 다른 후속 노드로 연결된다.Loop BodyCompleted · 반복 종료 후For LoopFirst = 0 · Last = 2Index로 처리0, 1, 2 → 세 번전체 결과 정리완료 후 한 번

동기 작업만 있는 연결 예입니다. Loop Body에서 시작한 비동기 작업의 완료를 Completed가 기다려 주는 것은 아닙니다.

흐름 제어 노드는 블루프린트 실행 경로를 조건, 순서, 반복 기준으로 나누는 기능입니다.

Branch, Sequence, Do Once, Gate, Loop를 상황에 맞게 조합하면 복잡한 실행 흐름도 단계적으로 구성할 수 있습니다.

실제 그래프에서는 먼저 어떤 질문을 실행 흐름에 던지고 있는지를 구분하면 노드 선택이 쉬워집니다.

배열 10개를 인덱스로 처리하려면 보통 0부터 9까지입니다. 중간 중단이 필요하면 With Break 변형을 검토하고, 큰 반복의 작업량은 나누어 처리합니다. 선택지가 여러 개인 실행 분기는 Switch를, 값을 고르는 작업은 Select를 검토합니다.


이번 절에서는 블루프린트의 실행 흐름을 제어하는 핵심적인 노드들에 대해 알아보았습니다.

이 노드들을 이해하고 활용하는 것은 블루프린트 개발 역량을 한 단계 높이는 중요한 과정입니다.