1.언리얼 블루프린트
- 1.1 프로젝트 환경설정
- 프로젝트 생성


- 언리얼 환경설정



- 새 레벨 만들기







- 1.2 블루 프린트란?
**블루프린트(Blueprint)**란 언리얼 엔진에서 제공하는 비주얼 스크립팅 시스템.
복잡한 코드 작성없이, 노드 기반의 블럭을 연결해서 프로그래밍이 가능하게 하는 시스템.
현업에서는 프로토타입 구현 혹은 아트 및 기획자 팀원들이 컨텐츠 구현시 사용.
Unreal C++를 사용한다 해도 타 직군과의 협업에서는 블루프린트를 만날 수 밖에 없음.
2. 변수와 연산
- 2.1 레벨 블루프린트
- 레벨 블루프린트 열기


- 2.2 이벤트 함수와 PrintString() 함수
이벤트 함수: 어떤 사건(Event)이 발생하면 호출되는 함수.
- BeginPlay : “게임 플레이의 시작”이라는 사건이 발생하면 호출되는 함수
- Tick: “매 게임 프레임”마다 호출되는 함수
- BeginPlay() 이벤트 함수와 PrintString() 함수 실습





- 2.3 블루프린트 변수
- 변수(Variable)
상수(값, Constant)를 저장할 수 있는 그릇.
언리얼에서는 멤버변수를 “속성(Property)”이라고 많이 부름.
- 블루프린트 변수 실습

보통 언리얼에선 대부분 변수 이름을 대문자로 시작함.
boolean 타입 같은 경우 소문자 b를 앞에 붙임


- 부울(Boolean): 참/거짓 두 가지 상태만 가짐
- 바이트(Byte): 정수, 가장 크기가 작음(0~255)
- 인티저(Integer): 정수, 일반적인 정수(-21억~21억)
- 인티저64(Integer64): 정수,가장 크기가 큼
- 플로트( Float): 실수, 정밀도가 더 우월함(double-precision)
- 이름(Name): 문자열, 엔진 내부에서 사용, 불변인 경우
- 스트링(String): 문자열, 일반적인 문자열(ex. 플레이어명)
- 텍스트(Text): 문자열, 퀘스트 설명같이 다국어 변환이 필요한 경우
- 2.4 블루프린트 변수의 Get, Set 노드
- 블루프린트 변수의 Get, Set 노드 실습




- 2.5 블루프린트 연산 노드
- 블루프린트 사칙 연산 노드 실습




노드 우측 하단 핀 추가 버튼을 누르면 입력 값의 개수를 늘릴 수 있음.
반대로 입력 값을 지우고 싶다면 핀 우클릭 후 핀 제거를 클릭.


- 비교 연산 노드
- 블루프린트에서 비교 연산자는 두 값을 비교하여 참 또는 거짓을 반환하는데 사용.
- 노드 생성 방법은 사칙 연산과 동일하게 레벨 블루프린트 화면에서 우클릭 후 기호를 검색

| 연산자 | 설명 |
| == | 두 값이 같은지 비교 |
| != | 두 값이 다른지 비교 |
| < | 첫 번째 값이 두 번째 값보다 작은지 비교 |
| > | 첫 번째 값이 두 번째 값보다 큰지 비교 |
| <= | 첫 번째 값이 두 번째 값보다 작거나 같은지 비교 |
| >= | 첫 번째 값이 두 번째 값보다 크거나 같은지 비교 |
- 논리 연산 노드
- 블루프린트에서 논리 연산은 여러 조건을 조합하거나 반전하여 복잡한 논리적 흐름을 처리할 때 사용.

| 연산자 | 설명 |
| AND | 두 조건이 모두 참일 때만 결과가 True가 됩니다. |
| OR | 두 조건 중 하나라도 참이면 결과가 True가 됩니다. |
| NOT | 조건의 결과를 반대로 만듭니다. |
| XOR | 두 조건 중 하나만 참일 때 True가 됩니다. → true(1) 1의 개수가 홀수개면 true. 짝수개면 false |
3. 흐름 제어 - 1
- 3.1 Branch와 Sequence
- Branch와 Sequence 실습






- 입력 관련 이벤트 함수




- 3.2 텍스트 슈팅 게임
- 텍스트 슈팅 게임 기획
지금까지 배운 블루프린트의 기능을 이용하여 간단한 텍스트 슈팅 게임을 만들어보자.
텍스트 슈팅 게임의 주요 기능은 총알을 발사하고, 재장전하는 것.
기본적으로 해당 기능들은 아래 조건을 만족한다고 가정해보자.
- 총알은 기본적으로 30발.
- 마우스 좌클릭을 할 때마다 총알이 1발씩 소모됨.
- 키보드 R을 누르면 재장전되어 총알 30발로 충전됨.
- 총알은 기본적으로 30발


- 마우스 좌클릭을 할 때마다 총알이 1발씩 소모됨.

- 키보드 R을 누르면 재장전되어 총알 30발로 충전됨.


- 3.3 1번 과제: 텍스트 슈팅 게임 버그 고치기
지금까지 구현한 텍스트 슈팅 게임에는 버그들이 존재함.
그 중 가장 중요한 버그 두 가지를 고쳐보자.
- 1) 30발 이상 격발 할 수 있는 버그

- 2) 총알이 가득차 있는 경우에도 재장전 되는 버그

- 3.4 2번 과제: 텍스트 슈팅 게임 기능 추가하기
총알을 발사하고 장전만 할 수 있는 게임은 너무 지루함.
두 가지 추가 기능을 구현해보자.
- 1) 과열 상태 추가

- 2) 쿨다운 기능

- 3.5 함수
거의 유사한 온도 관련 블루프린트 코드가 두 곳에 존재합니다.
이런 경우에 보통 함수로 만들어서 묶어둡니다.
코드를 묶어서 하나의 함수로 만들어봅시다.
- 함수 만들기




4. 흐름제어 - 2
- 4.1 While Loop와 For Loop
많은 프로그래밍 언어에서 반복문이라는 문법이 존재함.
블루프린트에서 반복문을 연습해보도록 하자.
반복문을 구현하는 노드는 다양하지만,
여기서는 While Loop와 For Loop 노드를 사용해보고자 함.
- While Loop



- For Loop



- 4.2 Array와 ForEach Loop
- Array 실습



- ForEach Loop 실습



- 4.3 열거형과 구조체 그리고 Switch
- 열거형(Enum)
정수형 상수에 이름을 부여해서 모아둔 것을 열거형이라고 함.
- 열거형 만들어보기






- 관전 포인트 2개
- 왜 String 자료형의 CurrentHeatState에서 Enum 자료형으로 바꿔야할까? Enum은 결국 정수처리 되기때문에 Enum 간의 비교시에 O(1) 속도로 가능. String은 내부적인 처리가 없는 한, 한글자씩 비교해야함.
- 지금처럼 수정해야하는 SetTemperature 함수로 코드를 묶어두지 않았다면, 이전처럼 이곳 저곳에 똑같은 코드가 있는 그 위치를 모두 찾아서 CurrentHeatState를 NewCurrentHeatState로 교체해줬어야함. 지금은 함수로 묶어놨기에, 해당 함수 로직만 수정해주면 모든 위치에서 로직이 수정됨. 함수는 유지보수에도 강점이 있음.
- Switch


- 구조체(Structure)
언어 스팩 상에 미리 구현되어 있는 Native type(int, float, double, …)이 아니라
프로그래머가 필요에 따라 자료형을 만들 수도 있음. 이것이 구조체.
- 구조체 만들어보기





- 4.4 3번 과제: 텍스트 슈팅 게임 무기 추가하기
- 1) 무기 추가하기
0번을 누르면 라이플, 1번을 누르면 샷건, 2번을 누르면 피스톨로 교체됩니다.
격발하면 현재 무기의 총알만 소모하고, 과열 상태도 현재 무기만 과열됩니다.


