본문 바로가기
Unreal Engine

Unreal Engine 열거형, 멀티 게이트, Switch 활용 예시: 무작위 과일 먹기

by hfgraphic 2025. 10. 31.
반응형

 

열거형, 멀티 게이트, Switch 활용 예시: 무작위 과일 먹기

 

안녕하세요, 다시 오신 것을 환영합니다. 다음 주제로 넘어가기 전에, 지금까지 배운 내용을 활용한 예시를 함께 만들어 보겠습니다.

 

1. 목표 시연

 

우리가 만들 것은 다음과 같습니다:

  1. Play를 누르면 "Welcome friend, please press E to eat a random fruit."라는 텍스트가 출력됩니다.
  2. E 키를 누를 때마다 무작위 과일이 선택됩니다. (예: 바나나)
  3. 과일을 먹으면 "You've eaten a banana. Your hunger meter is now 20."와 같이 현재 상태와 배고픔 측정기(Hunger Meter) 수치가 출력됩니다.
  4. 과일을 먹은 후에는 R 키를 눌러야 다시 먹을 수 있습니다.
  5. R 키를 누르고 E 키를 다시 누르면 다른 무작위 과일이 선택되고 배고픔 측정기 수치가 계속 누적됩니다.

 

2. 초기 설정 및 열거형 생성

  1. 레벨 블루프린트를 엽니다.
  2. Begin Play 이벤트를 만듭니다.
  3. Print String 노드를 연결하고 환영 메시지를 입력합니다:
  • "Welcome friend, please press E to eat a random fruit."
  1. E 키보드 이벤트를 만듭니다. (E 키를 누르면 무작위 과일을 먹는 이벤트입니다.)
  1. 과일 목록 열거형(E_Fruits) 생성:
  • 콘텐츠 폴더에서 오른쪽 클릭블루프린트(Blueprints) → **열거형(Enumeration)**을 선택합니다.
  • 이름을 E_Fruits로 지정하고 저장합니다.
  • E_Fruits를 열어 다음 항목을 추가하고 저장합니다:
  • Banana
  • Strawberry
  • Coconut
  • Pineapple
  1. 열거형 변수 생성:
  • 레벨 블루프린트에서 변수 이름은 Fruit으로, 타입은 E_Fruits로 설정합니다.

 

3. 무작위 과일 선택 로직 (Multi-Gate 사용)

 

E 키를 누르면 무작위로 과일이 선택되어 Fruit 변수에 설정되어야 합니다.

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

 

4. 과일 먹기 커스텀 이벤트 및 Select 노드 활용

 

Fruit 변수의 값이 설정되면, 이어서 과일을 먹는 코드를 실행해야 합니다.

  1. Custom Event를 만들고 이름을 EatFruit로 지정합니다.
  1. EatFruit 이벤트를 Set Fruit 노드들 뒤에 연결해야 합니다. Sequence 노드를 사용하여 깔끔하게 연결해 봅시다.
  • Set Fruit 노드들의 완료 핀들을 하나의 Sequence 노드 **실행 핀(Then 0)**에 연결합니다.
  • Sequence의 다음 핀(Then 1)에서 EatFruit 이벤트를 호출(Call) 합니다. (이렇게 하면 과일이 설정된 후 EatFruit 코드가 실행됩니다.)
  1. 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 활용

 

과일을 먹으면 배고픔 측정기 수치를 다르게 증가시켜야 합니다.

  1. 변수 생성: HungerMeter (정수/Integer)와 Hunger (정수/Integer) 변수를 만듭니다.
  • HungerMeter누적된 전체 배고픔 수치입니다. (기본값 0)
  • Hunger현재 먹은 과일이 부여하는 배고픔 수치입니다.
  1. Switch on E_Fruits 노드를 만듭니다. 이 노드를 EatFruit 이벤트의 실행 핀 바로 뒤에 연결합니다.
  1. 각 과일에 따른 Hunger 값 설정 (Set Hunger):
  • Set Hunger 노드를 4개 복사합니다.
  • Switch on E_Fruits의 각 핀에서 Set Hunger 노드로 연결하고, 각 과일에 따른 점수를 다르게 설정합니다. (예시: Banana 20, Strawberry 40, Coconut 80, Pineapple 5)
  1. Set HungerMeter (누적):
  • HungerMeter (Get) 노드를 가져옵니다.
  • Hunger (Get) 노드를 가져옵니다.
  • 두 값을 더하기(+) 연산으로 합칩니다.
  • 이 합산된 값을 Set HungerMeter 노드에 연결하여 누적 수치로 설정합니다.
  • (참고: 이 코드가 복잡해지면 함수(Function)로 축소할 수 있습니다. Set HungerMeter와 관련된 로직을 드래그하고 오른쪽 클릭 → Collapse to Function을 선택한 뒤 이름을 AddHunger로 지정하면 코드가 깔끔해집니다.)
  1. 결과 텍스트 출력:
  • AddHunger 함수 실행이 완료된 후, Format Text 노드를 사용하여 최종 메시지를 만듭니다.
  • 포맷: "Your hunger meter is now {HungerMeter}. If you want to eat more press R."
  • 포맷의 {HungerMeter} 핀에 Get HungerMeter 노드를 연결합니다.
  • Format TextPrint String 노드에 연결합니다.
  • Switch on E_Fruits의 모든 Set Hunger 완료 핀들을 Print String으로 연결합니다. (하나의 Print String으로 모든 분기의 결과를 출력합니다.)

 

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

현재 상태에서는 E 키를 계속 누르면 Multi-Gate가 계속 실행되어 버립니다. 한 번 먹은 후에는 R 키를 눌러야 다시 먹을 수 있도록 제어해야 합니다.

  1. Boolean 변수 생성: 이름을 CanEat으로 설정합니다. **기본값(Default Value)**을 True로 설정합니다. (게임 시작 시 먹을 수 있어야 합니다.)
  2. E 키 이벤트 앞에 Branch 노드를 연결하고, CanEat 변수를 조건으로 연결합니다.
  • True일 때만 Multi-Gate를 실행합니다.
  1. 먹은 후 CanEat 비활성화:
  • EatFruit 이벤트가 시작될 때, Set CanEat 노드를 연결하고 값을 False로 설정합니다.
  • 결과: 한 번 먹으면 CanEat이 False가 되어 E 키를 눌러도 Branch에서 막힙니다.
  1. R 키 리셋 로직:
  • R 키보드 이벤트를 만듭니다.
  • Set CanEat 노드를 연결하고 값을 True로 설정합니다.
  • 결과: E 키를 누르면 한 번 먹고 CanEat이 False가 됩니다. R 키를 누르면 CanEat이 다시 True가 되어 E 키를 다시 사용할 수 있게 됩니다.

 

7. 최종 점검 및 완성

 

  1. 컴파일하고 Play를 클릭합니다.
  2. 환영 메시지가 출력되는지 확인합니다.
  3. E 키를 누릅니다. → 무작위 과일과 Hunger Meter가 출력됩니다.
  4. E 키를 다시 누릅니다. → 아무 일도 일어나지 않습니다. (CanEat False)
  5. R 키를 누릅니다.
  6. E 키를 다시 누릅니다. → 다른 무작위 과일이 선택되고 Hunger Meter가 누적되어 올라가는 것을 확인합니다.

 

Multi-Gate는 모든 핀을 실행하면 멈추지만, R 키를 누를 때마다 CanEat 불리언을 리셋하여 새로운 Multi-Gate시퀀스를 시작할 수 있습니다.

이 예시를 통해 열거형(Enumeration), Multi-Gate, Select 노드, Switch on Enum, 그리고 Boolean 변수를 사용한 흐름 제어 방법을 성공적으로 실습했습니다. 이 개념들은 앞으로 모든 게임 개발 로직에서 핵심적으로 사용될 것입니다.

 

반응형