언리얼 공부

2024.12.18[While Loop로 구구단만들기, 열거형으로 가위바위보 만들기]

jeongchanhyo 2024. 12. 18. 20:16

오늘은 블루프린트와 친해질것이다.

1. While Loop를 이용해서 구구단만들기

While Loop란?

특정 조건을 만족하면 계속 반복하는 노드다!

간단하게 While Loop와 변수 A를 이용해숫자 카운트다운하는 친구를 만들어봤다.

이 친구가 하는 일을 설명하자면

0. 변수 A의 기본값을 10으로 만든다.

1. Y를 누른다.

2. (A가 0보다 크다면)A에서 1을 감소시킨다.

3. 유저에게 A의 숫자값 텍스트를 보여준다.

4. 2~3을 반복하다 (A가 0보다 크지 않다면) completed로 간다.

5. AND!라고 유저에게 텍스트를 보여준다.

그리고 뷰포트로 들어가 플레이를 누른 후 Y를 입력해주면?

이런식으로 잘 나오는 것을 확인할 수 있다.

그렇다면 이걸 이용해서 구구단을 만들어보자!

우선 머리속에 떠오른 회로는

1. 앞쪽 숫자를 맡아줄 X와 그걸 곱할 Y라는 변수를 만든다.

2. 앞쪽 X숫자가 1일 때 Y라는 숫자를 2~9로 1씩 늘리며 곱해준다.

3. B가 9까지 다 곱해줬으면 X에 1을 더하고 Y를 초기화한다.

4. X가 10에 도달하면 종료

라는 완벽한 계획을 가지고 출발했다!

안된다.

살펴보니 괄호가 잘못돼있었다(부끄럽다).

고치고 실행을 누르니

2단밖에 안나오고 10까지 곱해져버린다. 하지만 end!가 뜨는것을 보니 X는 10까지 올라간것으로 보인다. 그래서 잘 살펴보니 Y를 초기화 하는 과정을 까먹어버렸다. 그래서 고쳐봤더니

9단까지 아주 잘 나온다 이걸 깔끔하게 정리해서 다시 만들었다

작동도 잘 하고 모양도 이쁜 구구단 기기가 나왔다.(묶고싶은 노드들을 선택한 후, 우클릭 → 선택에서 코멘트 생성을 누르면 이쁘게 묶인다)

이 While Loop는 ㅁㅁ아이템을 N개까지 소비 하거나 할 때 간단하게 만들어 사용하기 좋아보인다.

 

2. 열거형으로 가위바위보 만들기!

열거형이란?

관련있는 상수들을 묶어놓는데 사용한다.

예를 들어 헬멧 - 1번, 무기 - 2번 이런식으로 숫자와 부위를 연결해놓으면 나중에 생각이 안날 때 마다 찾아봐야되고 종류가 늘어나면 점점 더 뇌 메모리를 먹게되는 불편함이 있을 수 있는데 직관적으로 그냥 볼 수 있는 장점이 있다

콘텐츠 브라우저에서 우클릭후 블루프린트 → 열거형 통해 만들 수 있다.

이렇게 만든곳에 들어가면 이너머레이터 추가를 통해 열거기를 만들 수 있고 그렇게 만들어 놓으면

변수를 추가할 때 이렇게 열거형 탭에서 아이템으로 추가할 수 있다

제대로 추가됐는지는 아이템은 디테일 탭의 기본값에서 확인할 수 있으며 이걸로 헷갈려서 실수할 확률이 줄어들었다!

 

그럼 이제 이걸 이용해서 가위 바위 보를 만들건데.처음 나에게 떠오른 사고!

1. 가위바위보가 있는 열거형을 만든다. 

2. Me라는 내가 낸 가위바위보가 들어갈 변수와 Enemy 라는 컴퓨터가 낼 가위바위보 변수를 열거형으로 만든다.

3. 내가 값 하나를 입력하면 컴퓨터에서 랜덤으로 값을 뽑아와 같은지 확인한다

3-a. 같으면 비겼습니다를 출력

4. 다르면 Branch을 이용해 Me 값을 확인

5. 거기서 Enemy값이 내가 낸걸 이기는지 확인

6. 총 결과값을 마지막에 출력

 

하지만 마주친 첫번째 난관... 랜덤으로 열거행에서 무언가를 뽑아내는 걸 못찾았고 Random Integer를 사용했다. 이걸 사용하니 또 비교논리에서 타입이다르다 어쩐다 해서. 구글링을 해봤다!

그렇게 찾은건 Byte to Enum RSP 이건 Byte(작은 숫자)를 RSP로 변경을 해주는 구세주같은 친구였다.

Random Integer을넣으니 연결이 잘 되는걸 볼 수 있다

아니 이건 또 왜 안되는데.... 이젠 또 숫자타입이여야된다는데그래서 앞에있는걸 지우고 연결을 했다.... 하지만 오류가 떴다....

(나중에 알게된 사실이지만 Enum에 있는 ==을 이용하면 연결이 잘 된다)

이걸이용하면?!

연결이 잘 되는것을 볼 수 있다.

 

그 외에 이것저것 시도하다 Swich on (열거행)이라는 노드를 발견했다! 이 노드는 열거형의 선택지 관련 IF문을 간단하게 만들어주는 노드인데  GOAT다. 이걸 이용해서 한번 화르륵 만들었더니 한번에 됐다! 만든걸 처리 순서대로 보여주자면

1. 내가 무엇을 낼건지 숫자를 눌러 입력한다 이 값은 Me 의 변수에 저장된다.

2. Random Integer에서 0~2 사이의 숫자를 랜덤하게 뽑아 열거형으로 바꾼다. 그 값을 변수 Enemy값에 넣는다.

3. Me값에 따라 분기를 3개로 나눈다.

4. Enemy값에 따른 분기를 또 3개씩 나눠서 총 9개의 선을 뽑아낸다

5. 그 값들을 결과에 따라 잘 연결시켜준다.

6. 승부 결과에 따른 대사를 Enum to String{열거형을 스트링(텍스트 조각)값으로 변경해주는 노드를 사용해 만들어주고 결과 텍스트에 연결해주면!  끝

크게보면 이런 모양이다.

이런식으로 결과가 잘 나온다.

우승!