흐름 제어 노드 (분기, 루프) 사용법
지금까지 변수를 통해 데이터를 저장하고, 함수와 이벤트를 통해 특정 작업을 수행하는 방법을 알아보았습니다. 하지만 게임 로직은 단순히 순서대로 실행되는 것만을 의미하지 않습니다. 특정 조건에 따라 다른 행동을 하거나, 특정 작업을 여러 번 반복해야 하는 경우가 훨씬 많습니다. 이때 필요한 것이 바로 흐름 제어 노드(Flow Control Nodes) 입니다.
흐름 제어 노드는 블루프린트의 실행 흐름을 원하는 대로 조작하고 분기하며 반복시키는 역할을 합니다. 마치 도로의 신호등이나 갈림길처럼, 프로그램이 나아갈 길을 결정하고 통제하는 핵심적인 요소입니다.
조건에 따른 분기: 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
노드를 연결하여 "게임 오버!" 메시지를 출력합니다.이 로직은 플레이어가 대미지를 받을 때마다 체력을 확인하여, 체력이 남아있으면 "생존" 메시지를, 체력이 0이거나 그보다 작아지면 "게임 오버" 메시지를 출력하게 됩니다.
여러 옵션 중 선택
때로는 단지 참/거짓으로 나누는 것 이상으로 복잡한 흐름 제어가 필요합니다.
-
Sequence
노드- 개념: 하나의 실행 입력 핀을 받아 여러 개의 실행 출력 핀을 순차적으로 실행합니다. 비동기적인 작업이 아닐 경우, 첫 번째 출력 핀이 완료된 후에 다음 출력 핀이 실행됩니다.
- 활용 예시: "오브젝트를 활성화한 후, 효과음을 재생하고, 이펙트를 출력하라"와 같이 여러 독립적인 작업을 정해진 순서대로 실행해야 할 때 유용합니다.
-
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
(실행 출력 핀): 모든 반복이 완료된 후 실행되는 핀입니다.
- 활용 예시: "모든 적 몬스터에게 대미지를 입혀라." (적 몬스터 목록이 배열로 있을 경우)
흐름 제어 노드는 블루프린트 로직에 생명력을 불어넣고, 복잡한 게임 시스템을 유연하게 구현할 수 있게 합니다. 이 노드들을 적절히 조합하면 단순한 조건문부터 복잡한 상태 머신, 그리고 반복적인 작업 처리까지 모든 것을 구현할 수 있습니다.
이번 절에서는 블루프린트의 실행 흐름을 제어하는 핵심적인 노드들에 대해 알아보았습니다. 이 노드들을 이해하고 활용하는 것은 블루프린트 개발 역량을 한 단계 높이는 중요한 과정입니다.