흐름 제어 노드 (분기, 루프) 사용법
흐름 제어 노드는 블루프린트에서 로직의 흐름을 제어하는 핵심 요소입니다.
이를 통해 조건에 따른 분기, 반복 실행 등 복잡한 로직을 구현할 수 있습니다.
1. Branch 노드
Branch 노드는 조건에 따라 실행 흐름을 분기하는 데 사용됩니다.
사용 방법
- 그래프에 Branch 노드 추가
- 조건 입력에 불리언 값 연결
- True와 False 출력 핀에 각각 다른 로직 연결
예제 : 플레이어 체력 검사
[플레이어 체력 얻기] --> [Branch: 체력 > 0?]
|
[게임 오버] <-- [False]
|
[플레이어 조작 가능] <-- [True]
2. Sequence 노드
Sequence 노드는 여러 작업을 순차적으로 실행하는 데 사용됩니다.
사용 방법
- Sequence 노드 추가
- 각 출력 핀에 순차적으로 실행할 로직 연결
예제 : 게임 초기화 시퀀스
[게임 시작] --> [Sequence]
|
[플레이어 스폰] <-- [Then 0]
|
[UI 초기화] <-- [Then 1]
|
[배경 음악 재생] <-- [Then 2]
3. For Loop 노드
For Loop 노드는 지정된 횟수만큼 로직을 반복 실행합니다.
사용 방법
- For Loop 노드 추가
- Last Index 입력에 반복 횟수 연결
- Loop Body 출력에 반복할 로직 연결
예제 : 적 캐릭터 여러 개 스폰
[게임 시작] --> [For Loop: 0 to 4]
|
[적 캐릭터 스폰] <-- [Loop Body]
|
[위치 조정] <-- [Index]
4. While Loop 노드
While Loop 노드는 조건이 참인 동안 로직을 반복 실행합니다.
사용 방법
- While Loop 노드 추가
- 조건 입력에 불리언 값 연결
- Loop Body 출력에 반복할 로직 연결
예제 : 자원 채집
[채집 시작] --> [While Loop: 자원 > 0 && 인벤토리 여유 있음]
|
[자원 채집] <-- [Loop Body]
|
[인벤토리에 추가] <-- [Completed]
5. Switch 노드
Switch 노드는 여러 가지 경우 중 하나를 선택하여 실행합니다.
사용 방법
- Switch 노드 추가 (Enum, Integer, String 등 선택)
- 입력 값에 따라 각 케이스에 로직 연결
예제 : 무기 타입에 따른 공격
[현재 무기 얻기] --> [Switch on EWeaponType]
|
[근접 공격 실행] <-- [Melee]
|
[원거리 공격 실행] <-- [Ranged]
|
[마법 시전] <-- [Magic]
6. Gate 노드
Gate 노드는 실행 흐름을 제어하여 특정 조건에서만 통과시킵니다.
사용 방법
- Gate 노드 추가
- Enter 핀으로 실행 흐름 연결
- Open과 Close 핀으로 게이트 상태 제어
예제 : 쿨다운 시스템
[스킬 사용 입력] --> [Gate]
|
[스킬 실행] <-- [Exit]
|
[쿨다운 타이머 시작] <-- [나가기]
[Gate Close]
[쿨다운 종료] --> [Gate Open]
7. MultiGate 노드
MultiGate 노드는 여러 출력 중 하나를 순차적으로 또는 무작위로 선택합니다.
사용 방법
- MultiGate 노드 추가
- 출력 핀 수 설정
- 각 출력에 다른 로직 연결
예제 : 랜덤 아이템 생성
[아이템 생성 이벤트] --> [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]
흐름 제어 노드는 블루프린트에서 복잡한 게임 로직을 구현하는 데 필수적인 도구입니다.
각 노드의 특성을 이해하고 적절히 조합하여 사용함으로써, 효율적이고 가독성 높은 블루프린트를 작성할 수 있습니다.
지속적인 연습과 실제 프로젝트 적용을 통해 이러한 노드들을 효과적으로 활용하는 능력을 키우는 것이 중요합니다.