icon안동민 개발노트

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


 흐름 제어 노드는 블루프린트에서 로직의 흐름을 제어하는 핵심 요소입니다.

 이를 통해 조건에 따른 분기, 반복 실행 등 복잡한 로직을 구현할 수 있습니다.

1. Branch 노드

 Branch 노드는 조건에 따라 실행 흐름을 분기하는 데 사용됩니다.

 사용 방법

  1. 그래프에 Branch 노드 추가
  2. 조건 입력에 불리언 값 연결
  3. True와 False 출력 핀에 각각 다른 로직 연결

 예제 : 플레이어 체력 검사

[플레이어 체력 얻기] --> [Branch: 체력 > 0?]
                         |
           [게임 오버] <-- [False]
                         |
     [플레이어 조작 가능] <-- [True]

2. Sequence 노드

 Sequence 노드는 여러 작업을 순차적으로 실행하는 데 사용됩니다.

 사용 방법

  1. Sequence 노드 추가
  2. 각 출력 핀에 순차적으로 실행할 로직 연결

 예제 : 게임 초기화 시퀀스

[게임 시작] --> [Sequence]
                   |
       [플레이어 스폰] <-- [Then 0]
                   |
         [UI 초기화] <-- [Then 1]
                   |
   [배경 음악 재생] <-- [Then 2]

3. For Loop 노드

 For Loop 노드는 지정된 횟수만큼 로직을 반복 실행합니다.

 사용 방법

  1. For Loop 노드 추가
  2. Last Index 입력에 반복 횟수 연결
  3. Loop Body 출력에 반복할 로직 연결

 예제 : 적 캐릭터 여러 개 스폰

[게임 시작] --> [For Loop: 0 to 4]
                     |
     [적 캐릭터 스폰] <-- [Loop Body]
                     |
         [위치 조정] <-- [Index]

4. While Loop 노드

 While Loop 노드는 조건이 참인 동안 로직을 반복 실행합니다.

 사용 방법

  1. While Loop 노드 추가
  2. 조건 입력에 불리언 값 연결
  3. Loop Body 출력에 반복할 로직 연결

 예제 : 자원 채집

[채집 시작] --> [While Loop: 자원 > 0 && 인벤토리 여유 있음]
                     |
         [자원 채집] <-- [Loop Body]
                     |
   [인벤토리에 추가] <-- [Completed]

5. Switch 노드

 Switch 노드는 여러 가지 경우 중 하나를 선택하여 실행합니다.

 사용 방법

  1. Switch 노드 추가 (Enum, Integer, String 등 선택)
  2. 입력 값에 따라 각 케이스에 로직 연결

 예제 : 무기 타입에 따른 공격

[현재 무기 얻기] --> [Switch on EWeaponType]
                         |
     [근접 공격 실행] <-- [Melee]
                         |
     [원거리 공격 실행] <-- [Ranged]
                         |
         [마법 시전] <-- [Magic]

6. Gate 노드

 Gate 노드는 실행 흐름을 제어하여 특정 조건에서만 통과시킵니다.

 사용 방법

  1. Gate 노드 추가
  2. Enter 핀으로 실행 흐름 연결
  3. Open과 Close 핀으로 게이트 상태 제어

 예제 : 쿨다운 시스템

[스킬 사용 입력] --> [Gate]
                    |
        [스킬 실행] <-- [Exit]
                    |
   [쿨다운 타이머 시작] <-- [나가기]
   [Gate Close]
   
[쿨다운 종료] --> [Gate Open]

7. MultiGate 노드

 MultiGate 노드는 여러 출력 중 하나를 순차적으로 또는 무작위로 선택합니다.

 사용 방법

  1. MultiGate 노드 추가
  2. 출력 핀 수 설정
  3. 각 출력에 다른 로직 연결

 예제 : 랜덤 아이템 생성

[아이템 생성 이벤트] --> [MultiGate (Random)]
                           |
         [체력 포션 생성] <-- [0]
                           |
         [마나 포션 생성] <-- [1]
                           |
             [골드 생성] <-- [2]

효율적인 흐름 제어 노드 사용 팁

 1. 복잡성 관리

  • 너무 많은 분기를 한 노드에 넣지 않기
  • 필요시 함수로 분리하여 가독성 향상

 2. 최적화 고려

  • 루프 내에서 무거운 연산 피하기
  • 불필요한 체크 최소화

 3. 디버깅 용이성

  • 중요 지점에 주석 추가
  • 복잡한 로직은 단계별로 나누어 구현

 4. 재사용성 고려

  • 자주 사용되는 로직은 함수나 매크로로 만들기

 5. 안전성 확보

  • 극단적인 경우 고려 (예 : 빈 배열, 0으로 나누기 등)
  • 에러 처리 로직 추가

고급 흐름 제어 기법

 1. 상태 머신 구현

  • Enum Switch와 함수를 조합하여 복잡한 상태 전이 구현
[현재 상태] --> [Switch on EPlayerState]
                     |
   [Idle 상태 처리] <-- [Idle]
                     |
[Moving 상태 처리] <-- [Moving]
                     |
[Attacking 상태 처리] <-- [Attacking]

 2. 코루틴 시뮬레이션

  • Delay 노드와 루프를 사용하여 비동기 작업 구현
[시작] --> [Do While Loop]
                  |
      [작업 수행] <-- [Loop Body]
                  |
   [Delay 0.1s] <-- [Completed]

 3. 이벤트 기반 로직

  • Event Dispatchers와 바인딩을 활용한 느슨한 결합 구조 생성

 4. 동적 분기

  • 실행 시간에 조건을 평가하여 동적으로 흐름 제어
[조건 평가 함수] --> [Branch]
                        |
[동적 생성 노드 실행] <-- [True]

 흐름 제어 노드는 블루프린트에서 복잡한 게임 로직을 구현하는 데 필수적인 도구입니다.

 각 노드의 특성을 이해하고 적절히 조합하여 사용함으로써, 효율적이고 가독성 높은 블루프린트를 작성할 수 있습니다.

 지속적인 연습과 실제 프로젝트 적용을 통해 이러한 노드들을 효과적으로 활용하는 능력을 키우는 것이 중요합니다.