오늘은 블루프린트에 대해서 학습했다. 가장 기본이 되는 블루프린트의 변수 타입에 대해서 살펴보았다.
- 부울(Boolen) : 참/거짓 두 가지 상태만 가짐
- 바이스(Byte) : 정수. 가장 크기가 작음(0~255)
- 인티저(Integer) : 정수. 일반적인 정수(-21억 ~ 21억)
- 인티저64(Integer64) : 정수. 가장 크기가 큼
- 플로트(Floay) : 실수. 정밀도 더 우월함(double-precision)
- 이름(Name) : 문자열. 엔진 내부에서 사용, 불변인 경우
- 스트링(String) : 문자열. 일반적인 문자열(ex. 플레이어 명)
- 텍스트(Text) : 문자열, 퀘스트 설명같이 다국어 변환(현지화)이 필요한 경우
다음으로는 블루프린트의 사칙 연산에 대해서 학습했다. 기호는 +, -, *, / 를 사용하고 항목에 뜨는 함수를 선택하면 되는데 각각 덧셈, 뺄셈, 곱셈, 나눗셈을 할 때 사용된다.
블루프린트의 비교연산자에도 다양한 노드들이 있는데 평소에 사용하지 않던 것들이 보여서 조금은 당황스러웠다.
- == : 두 값이 같은지 비교
- != : 두 값이 다른지 비교
- < : 첫 번째 값이 두 번째 값보다 작은지 비교
- > : 첫 번째 값이 두 번째 값보다 큰지 비교
- <= : 첫 번째 값이 두 번째 값보다 작거나 같은지 비교
- >= : 첫 번째 값이 두 번째 값보다 크거나 같은지 비교
!=, <=, >= 같이 일상생활에서 자주 보지 못하던 연산자들이라 까먹지 않게 자주 사용해 봐야겠다.
그 다음으로는 논리 연산을 공부했다.
- AND : 두 조건이 모두 참일 때만 결과가 True가 됨.
- OR : 두 조건 중 하나라도 참이면 결과가 True가 됨.
- NOT : 조건의 결과를 반대로 만듦.
- XOR : 두 조건 중 하나만 참일 때 True가 됨.
여기에 있는 연산자들은 그나마 평소에 보던 것들이 좀 있어서 학습하는데 수월했었다.
블루프린트에서 흐름을 제어하는 노드들도 학습했다. Branch 노드는 True와 False로 나누어져 있는데 Condition에 넣는 조건에 따라 참과 거짓을 판단하고 노드의 흐름을 제어한다.
Sequence 노드는 실행 흐름을 여러 개의 출력으로 분리하고, 순차적으로 각 출력 핀을 실행하는 노드다. 노드의 양이 너무 많이져서 연결이 복잡해지는 경우에 Sequence 노드를 사용해주면 다음과 같이 실행 순서를 정리해 줄 수 있다. 또한 핀 추가를 통해 Then의 개수를 늘릴 수 있으며, Then 순서에 맞춰 노드를 배열함으로써 실행 흐름을 편리하게 제어할 수 있다.
Flip Flop은 실행 흐름을 번갈아가며 두 개의 출력 핀으로 구분하여 실행하는 노드이다. 하나의 실행 핀으로 입력을 받고, 두 개의 실행 핀이 번갈아 실행된다. 반복적으로 번갈아 실행되는 동작을 간단히 구현할 수 있는 장점이 있으며, 상태 전환을 쉽게 관리할 수 있다.
While Loop는 특정 조건을 만족하면 계속 반복하는 노드이다.
예를 들어 위에 보이는 것처럼 Count가 0보다 큰지를 판별하는 조건이 있다고 가정해보자. 이 경우, Count가 0보다 크면 Loop Body에 연결된 노드가 실행되고, 작으면 Complete로 빠져나간다.
- Loop Body : 조건을 만족할 때 반복하며 실행되는 코드
- Complete : 조건을 만족하지 않을 때 빠져나오는 코드
아래에 보이는 것은 반복문을 실행할 때마다, Count에서 숫자 1을 빼주는 노드를 추가한 모습이다. 그리고 반복문을 빼져나올 때, Print Text 노드를 실행하도록 구현했다.
For Loop는 특정 인덱스 범위 내에서 계속 반복하는 노드이다.
First Index, Last Index라는 것이 있는데 Last Index를 5로 설정하면, 0부터 5까지 Index가 증가하면서 반복문이 실행된다. 즉, 인덱스의 범위를 지정해주면 인덱스 개수만큼 반복문이 실행되는 것이다.
- First Index : 인덱스 시작 값
- Last Index : 인덱스 종료 값
- Loop Body : 조건을 만족할 때 반복하며 실행되는 코드
- Index : 현재 인덱스 값
- Complete : 조건을 만족하지 않을 때 빠져나오는 코드
다음과 같이 인덱스를 출력하는 노드와 반복이 종료되면 End!를 출력하는 노드를 만들어 봤다.
오늘 배운 노드들을 사용해 1. 구구단, 2. 가위 바위 보를 만들어 보았다.
1. 구구단
While Loop를 사용해 구구단을 만들어 보았다. 구구단이 'A x B = C'라고 생각해보자. 숫자 9를 누르면 첫 번째 숫자(A)에 2가 저장되고 While Loop구문에 의해 2단부터 9단까지의 A가 설정되고, 그 뒷자리인 B가 1로 저장이 된 후 1~9까지 세팅된다. 그 후 Print Text > Format Text의 {}값에 A, B가 들어가고 A x B 값이 C에 들어간다.
2. 가위 바위 보
우선 만들면서 느낀 점은 어릴때부터 친구들과 너무 자연스럽게 하던 가위 바위 보가 컴퓨터랑 하려니 이렇게 어려운 건지 몰랐다... 하지만 실패를 모르는 나는 어떻게든 풀어 나갔다. 그렇게 이러한 블루프린트가 만들어졌다.
우선 노드가 너무 길어지는 것을 방지해 결과 값을 프린트 해주는 'Result'라는 커트텀 이벤트를 생성해 주었다.
그 다음으로 Enum을 사용해 가위, 바위, 보를 각각 설정해줬고 1, 2, 3을 누르면 플레이어가 바위, 가위, 보를 낼 수 있게 했다. 그 후 컴퓨터는 Random integer 노드에 의해 랜덤한 값을 내게 했다.
1. 가장 먼저 비기는 경우를 판단했다. 비겼다면(플레이어와 컴퓨터의 Enum 번호가 동일하다면) 바로 Draw를 출력했고 그렇지 않다면 다음으로 넘어갔는데
2. 아래에 보이는 것처럼 Switch On 노드를 사용해 해당 값마다의 원하는 논리를 설정했다.
3. 이제는 승, 패만을 판한하면 된다. 여기에서 바위 = 0, 가위 = 1, 보자기 = 2 라고 생각하고 진행했다. 플레이어가 바위를 냈을 때 0이고 이 때 플레이어가 승리를 하려면 컴퓨터가 가위를 내야 하기 때문에 조건에 컴퓨터가 가위를 낸 경우인 1을 설정해줬다. 아래도 동일한 논리로 각각의 조건을 설정해줬고 그 다음은 Result 함수를 호출했다.
오늘 마무리하며 느낀점은 아직 많이 부족하고 더 열심히 심도 있게 공부를 해야겠다.

'Unreal > BluePrint' 카테고리의 다른 글
블루프린트로 간단한 이동식 플랫폼 게임 만들기 (3) | 2024.12.21 |
---|---|
FPS, TPS 장르의 피격 상황 분석 (0) | 2024.12.09 |