반응형
    
    
    
  
열거형, 멀티 게이트, Switch 활용 예시: 무작위 과일 먹기
안녕하세요, 다시 오신 것을 환영합니다. 다음 주제로 넘어가기 전에, 지금까지 배운 내용을 활용한 예시를 함께 만들어 보겠습니다.
1. 목표 시연
우리가 만들 것은 다음과 같습니다:
- Play를 누르면 "Welcome friend, please press E to eat a random fruit."라는 텍스트가 출력됩니다.
- E 키를 누를 때마다 무작위 과일이 선택됩니다. (예: 바나나)
- 과일을 먹으면 "You've eaten a banana. Your hunger meter is now 20."와 같이 현재 상태와 배고픔 측정기(Hunger Meter) 수치가 출력됩니다.
- 과일을 먹은 후에는 R 키를 눌러야 다시 먹을 수 있습니다.
- R 키를 누르고 E 키를 다시 누르면 다른 무작위 과일이 선택되고 배고픔 측정기 수치가 계속 누적됩니다.
2. 초기 설정 및 열거형 생성

- 레벨 블루프린트를 엽니다.
- Begin Play 이벤트를 만듭니다.
- Print String 노드를 연결하고 환영 메시지를 입력합니다:
- "Welcome friend, please press E to eat a random fruit."
- E 키보드 이벤트를 만듭니다. (E 키를 누르면 무작위 과일을 먹는 이벤트입니다.)

- 과일 목록 열거형(E_Fruits) 생성:

- 콘텐츠 폴더에서 오른쪽 클릭 → 블루프린트(Blueprints) → **열거형(Enumeration)**을 선택합니다.
- 이름을 E_Fruits로 지정하고 저장합니다.
- E_Fruits를 열어 다음 항목을 추가하고 저장합니다:
- Banana
- Strawberry
- Coconut
- Pineapple

- 열거형 변수 생성:
- 레벨 블루프린트에서 변수 이름은 Fruit으로, 타입은 E_Fruits로 설정합니다.

3. 무작위 과일 선택 로직 (Multi-Gate 사용)
E 키를 누르면 무작위로 과일이 선택되어 Fruit 변수에 설정되어야 합니다.
- Multi-Gate 노드를 만듭니다. E 키를 Enter 핀에 연결합니다.
- Multi-Gate 노드의 출력 핀이 4개가 되도록 추가합니다.
- Is Random 옵션을 체크하여 무작위 선택이 이루어지도록 합니다.
- Set Fruit 노드를 4개 복사합니다.
- 각 Set Fruit 노드를 Multi-Gate의 출력 핀 (Out 0, Out 1, Out 2, Out 3)에 연결하고, 각 노드의 값을 각각 Banana, Strawberry, Coconut, Pineapple로 설정합니다.
- 결과: E 키를 누르면 4개의 핀 중 하나가 무작위로 선택되어 Fruit 변수에 해당 과일 값이 설정됩니다.

4. 과일 먹기 커스텀 이벤트 및 Select 노드 활용
Fruit 변수의 값이 설정되면, 이어서 과일을 먹는 코드를 실행해야 합니다.
- Custom Event를 만들고 이름을 EatFruit로 지정합니다.

- 이 EatFruit 이벤트를 Set Fruit 노드들 뒤에 연결해야 합니다. Sequence 노드를 사용하여 깔끔하게 연결해 봅시다.
- Set Fruit 노드들의 완료 핀들을 하나의 Sequence 노드 **실행 핀(Then 0)**에 연결합니다.
- Sequence의 다음 핀(Then 1)에서 EatFruit 이벤트를 호출(Call) 합니다. (이렇게 하면 과일이 설정된 후 EatFruit 코드가 실행됩니다.)
- Select 노드를 사용하여 먹은 과일에 대한 메시지 선택:
- Fruit 변수 Get 노드를 만듭니다.
- 이 핀에서 드래그하여 Select를 검색합니다.

- Select 노드를 만들면, Fruit 열거형 값에 따라 출력 값을 선택할 수 있습니다.
- 출력 핀을 오른쪽 클릭 → 핀 타입 변경(Change Pin Type) → Text로 설정합니다.


- 각 과일 값에 따라 출력될 텍스트를 입력합니다: | 열거형 값 | Select 출력 텍스트 (예시) | | :---: | :---: | | Banana | "Yum, it was a banana." | | Strawberry | "Oh my god, a strawberry!" | | Coconut | "Awesome, a coconut." | | Pineapple | "Nice, you ate a pineapple." |
- Print String 노드를 만들고, Select 노드의 출력 핀을 Print String에 연결하여 텍스트를 화면에 출력합니다.

5. 배고픔 측정기(Hunger Meter) 및 Switch on Enum 활용
과일을 먹으면 배고픔 측정기 수치를 다르게 증가시켜야 합니다.
- 변수 생성: HungerMeter (정수/Integer)와 Hunger (정수/Integer) 변수를 만듭니다.
- HungerMeter는 누적된 전체 배고픔 수치입니다. (기본값 0)
- Hunger는 현재 먹은 과일이 부여하는 배고픔 수치입니다.
- Switch on E_Fruits 노드를 만듭니다. 이 노드를 EatFruit 이벤트의 실행 핀 바로 뒤에 연결합니다.

- 각 과일에 따른 Hunger 값 설정 (Set Hunger):
- Set Hunger 노드를 4개 복사합니다.
- Switch on E_Fruits의 각 핀에서 Set Hunger 노드로 연결하고, 각 과일에 따른 점수를 다르게 설정합니다. (예시: Banana 20, Strawberry 40, Coconut 80, Pineapple 5)
- Set HungerMeter (누적):
- HungerMeter (Get) 노드를 가져옵니다.
- Hunger (Get) 노드를 가져옵니다.
- 두 값을 더하기(+) 연산으로 합칩니다.
- 이 합산된 값을 Set HungerMeter 노드에 연결하여 누적 수치로 설정합니다.
- (참고: 이 코드가 복잡해지면 함수(Function)로 축소할 수 있습니다. Set HungerMeter와 관련된 로직을 드래그하고 오른쪽 클릭 → Collapse to Function을 선택한 뒤 이름을 AddHunger로 지정하면 코드가 깔끔해집니다.)


- 결과 텍스트 출력:
- AddHunger 함수 실행이 완료된 후, Format Text 노드를 사용하여 최종 메시지를 만듭니다.
- 포맷: "Your hunger meter is now {HungerMeter}. If you want to eat more press R."
- 포맷의 {HungerMeter} 핀에 Get HungerMeter 노드를 연결합니다.
- 이 Format Text를 Print String 노드에 연결합니다.
- Switch on E_Fruits의 모든 Set Hunger 완료 핀들을 Print String으로 연결합니다. (하나의 Print String으로 모든 분기의 결과를 출력합니다.)



6. 중복 먹기 방지 (Boolean 사용) 및 리셋 (R 키)

현재 상태에서는 E 키를 계속 누르면 Multi-Gate가 계속 실행되어 버립니다. 한 번 먹은 후에는 R 키를 눌러야 다시 먹을 수 있도록 제어해야 합니다.
- Boolean 변수 생성: 이름을 CanEat으로 설정합니다. **기본값(Default Value)**을 True로 설정합니다. (게임 시작 시 먹을 수 있어야 합니다.)
- E 키 이벤트 앞에 Branch 노드를 연결하고, CanEat 변수를 조건으로 연결합니다.
- True일 때만 Multi-Gate를 실행합니다.
- 먹은 후 CanEat 비활성화:
- EatFruit 이벤트가 시작될 때, Set CanEat 노드를 연결하고 값을 False로 설정합니다.
- 결과: 한 번 먹으면 CanEat이 False가 되어 E 키를 눌러도 Branch에서 막힙니다.

- R 키 리셋 로직:
- R 키보드 이벤트를 만듭니다.

- Set CanEat 노드를 연결하고 값을 True로 설정합니다.
- 결과: E 키를 누르면 한 번 먹고 CanEat이 False가 됩니다. R 키를 누르면 CanEat이 다시 True가 되어 E 키를 다시 사용할 수 있게 됩니다.
7. 최종 점검 및 완성
- 컴파일하고 Play를 클릭합니다.
- 환영 메시지가 출력되는지 확인합니다.
- E 키를 누릅니다. → 무작위 과일과 Hunger Meter가 출력됩니다.
- E 키를 다시 누릅니다. → 아무 일도 일어나지 않습니다. (CanEat False)
- R 키를 누릅니다.
- E 키를 다시 누릅니다. → 다른 무작위 과일이 선택되고 Hunger Meter가 누적되어 올라가는 것을 확인합니다.
Multi-Gate는 모든 핀을 실행하면 멈추지만, R 키를 누를 때마다 CanEat 불리언을 리셋하여 새로운 Multi-Gate시퀀스를 시작할 수 있습니다.
이 예시를 통해 열거형(Enumeration), Multi-Gate, Select 노드, Switch on Enum, 그리고 Boolean 변수를 사용한 흐름 제어 방법을 성공적으로 실습했습니다. 이 개념들은 앞으로 모든 게임 개발 로직에서 핵심적으로 사용될 것입니다.
반응형
    
    
    
  'Unreal Engine' 카테고리의 다른 글
| Unreal Engine Switch on Enumeration (열거형 전환) 노드 설명 (0) | 2025.10.29 | 
|---|---|
| Unreal Engine 열거형(Enumeration) 비교하기 (0) | 2025.10.29 | 
| Unreal Engine 열거형(Enumeration) 소개, 생성 및 사용하기 (0) | 2025.10.29 | 
| Unreal Engine 게이트 (Gate) 및 멀티 게이트 (Multi-Gate) 노드 설명 (0) | 2025.10.28 | 
| Unreal Engine "Do Once" 및 "Do N" 노드 설명 (0) | 2025.10.27 | 
 
                    
                   
                    
                   
                    
                  