블루프린트는 언리얼에서 제공하는 비주얼 스크립팅 시스텝으로 코드 대신 블록형태로 생긴 노드 와 라인 을 연결하여 구조를 표현하고있으며 직관적인 인터페이스로 사용하기 쉽게 되어있고 프로그래밍 언어 없이도 여러 노드들을 서로 연결하고 관계를 정의 함으로써 게임을 프로그래밍 할 수 있게해주는 인터페이스 입니다.
블루프린트를 사용을 하려면

메인 툴바에 있는 블루프린트를 목록을 열어서 레벨 블루프린트 열기를 누르게 되면 아래 이미지와 같은 화면이 보이게 되는데요

왼쪽의 내 블루프린트 창에서는 다양한 변수, 함수에 접근 및 생성이 가능하고 디테일 패널에서는 현재 레벨 블루프린트의 상태를 확인 할 수 있습니다.

간단하게 알아보자면
일종의 구조도로 어떠한 상황이 벌어졌을 때, 어떠한 행동을 할지 구조로 표현한 것
EventGraph
어떠한 상황이 발생했을 때 어떠한 행동양식을 취할 것인지 정해주는 구조 (실질적으로
블루프린트 노드가 동작하는 구조는 이벤트 그래프 내에서 벌어진다고 생각하면 된다.)Event BeginPlay : 이 레벨이 시작될 때 실행되는 블루프린트 노드의 상황
Beginplay는 레벨에 있다면, 레벨이 시작될 시 실행되는 상황입니다. 여기에 여러가지 노드를 연결해 실행할 수 있는데요, 노드의 생성은 오른쪽 클릭을 하면 생성할수 있고 기존 노드의 구멍에서 드래그앤 드롭을 통해 생성할 수도 있습니다.
Event Tick : 매 프레임 이벤트를 발생하며 프레임이 갱신될 때마다 실행되는 상황
여러가지 행동을 하나의 행동으로 묶어주는 역할을 합니다.
어떠한 값이 들어왔을 때 그 값에 여러가지 처리를 해 다른 값으로 바꿔주는 역할을 수행합니다.
프로그램에서 사용되는 저장 공간의 일종으로 우리가 새로운 값을 할당해 사용할수 있습니다. 게임에서는 다양한 데이터를 담기 위해 사용되며 스탯, 아이템의 이름과 개수 등에 사용이 된다.

변수 안을 살펴 보면 여러가지 자료형들을 볼 수 있으며 간단하게 설명을 하면
우리가 만들어준 상황에 따른 행동을 연결해 주는 것
이번에는 직접 블루프린터를 사용해서 프로그래밍을 연습해 보겠습니다.

Event BeginPlay에서 노드를 끌어다 놓으면 필요한 노드창을 꺼내 쓸 수가 있으며 빈 창에 우클릭를 해도 됩니다.

문자열을 내보내주는 Print String 노드를 꺼내서 원하는 문구를 적어준뒤 Event BeginPlay 에 노드를 연결하고

컴파일(컴퓨터가 이해할 수 있도록 노드를 해석해주는 버튼)을 눌러 변환을 해준뒤 저장을 눌러 저장을 해준뒤 레벨 창으로 나가서 실행 버튼을 누르게 되면

화면 상단에 적어놓은 문구가 출력이 되는걸 볼 수 있습니다.


추가적으로 노드를 더 연결 시켜서 출력을 해봤는데 Event BeginPlay에 먼저 연결된 순으로 순차적으로 출력이 되는걸 확인 할 수 있었습니다.
그리고 PrintString 에서 계속 보여지는 개발 전용 이라는 문구는 실제 게임에서는 보여지지 않고 개발 할 때만 볼 수 있다는 뜻입니다.
이번에는 변수를 한번 내보내 보도록 하겠습니다.

변수 창에서 인티저(정수) 를 꺼내 보면 다음과 같은 문구가 보이는데
Set Var1 은 Var1을 몇으로 바꿔주겠다 라는 의미이며
Get Var1 은 Var1을 가져다 쓰겠다 라는 뜻입니다.

정수를 5로 설정해두고 다음과 같이 연결해 주면 입력한 값이 출려기 되지 않는데 그 이유는 PrintString이 String자료형만 받기 때문에 출력이 되지 않아서 이 것을 해결하기 위해서 Var1의 형 변환이 필요합니다.
GetVar1에서 선을 끌어다 To String을 새로 만들어 PrintString에 연결해 주면
정수값이 문자열로 변해 그 문자열이 출력할수 있게 변환해주게 되면서 5라는 정수값이 출력이 됩니다.


다음은 함수를 사용해서 실습을 해봤는데요
함수에 보면 오버라이드라는 항목이 보이는데 이는 기존에 정의되어있는 함수들이 있는데 그것을 덮어씌우거나 추가하는 역할을 수행합니다.
그렇기 때문에 오버라이드에는 다양한 여러가지 상황이 주어져있는걸 볼 수 가있습니다.

함수 추가 버튼을 눌러 함수를 추가해주고




PrintString를 꺼내서 노드를 연결해준뒤 EventGraph로 돌아가서 생성한 함수를 불러 노드를 연결 시키게되면 EventGraph에 있는 Event BeginPlay를 통해 NewFunction이 호출되고, 만들어놓은 함수 리스트에 있는 함수가 실행되게 됩니다.
이처럼 여러가지 행동약식을 하나로 묶어주는 것이 함수이고 함수는 긴히 지정될 수 있으며 덮어씌우거나 하는 것도 가능하다라는걸 알게되었습니다.
마지막으로 프로그래밍에서 가장 핵심적인 부분인 흐름제어 노드에대해서 실습해 보겠습니다.




















변수 비교 및 매크로
비교 노드에는 <, <=, >, >=, ==(같다), !=(같지않다)등을 입력해 비교해 참, 거짓을 판별하는 Bool형으로 나타낼 수 있습니다.

인티저 a,b를 비교해 봤습니다.

다음은 매크로를 알아봤는데요
매크로는 입력, 츨력을 설정하여 여럭 값들을 한번에 입력 받아 여러 값 으로 나타나게 하거나, 하나의 값을 입력 받아 여러 개 혹은 여러 개를 입력 받아 하나의 출력 값으로 나타나게 하는 노드를 생성할 수 있습니다.
다음과 같이 매크로를 하나 만들어준다음 Inputs, Outputs을 설정 해준뒤
a가b보다 크면 출력이 되는 거랑 b가c보다 크면 출력이 되면 출력이 되는 노드를 매크로로 만들어 줍니다.

그리고 EventGraph로 나와서 매크로를 끌어다 놓으면 다음과 같이 위에서 매크로로 만든 노드가 생성이 된걸 확인 할 수있습니다.

사칙연산 노드는 Add(+), Subtract(-), Multiply(X), Divide(%)로 네 종류가 있습니다.

다음으로는 정수를 문자열로 변환을 시킬 때 정수를 문자열로 변환하는 것은 toString 노드를 사용하여 변환을 시켜주는게 가능한데 Ex) 정수 300을 문자열 300으로 변환하면, 이는 3, 0, 0으로 구성된 문자들의 집합인 문자열이 되는데 이때, 정수 300과 문자열300은 다른것입니다. 정수 300은 그 수치 자체를 의미하고, 문자열 300은 문자들의 구성인 문자열이기 때문입니다. 그러나 블루프린트노트에서는 같은 것으로 인식이되만 권장하지는 않는다고 합니다. 문자열을 숫자로 변환하는 매크로 혹은 함수를 통해 비교하거나, 숫자를 문자열로 바꾸어 비교하는 방법을 추천합니다.


toString은 단순히 받은 입력값을 문자열로 변환시켜주는 역할을 합니다.

위에서 했던 말을 쉽게 설명하면 A가300이라고 할 때 위에 인티저는 그 값 자체인 300을 뜻하고 밑에 인티저는 정수를 문자열로 변환 시킨거라 3,0,0이 되면서 형태가 달라 둘은 다른것으로 생각하면되는데 블루프린트노트에서는 같은 형태로 인식을 한다라고만 생각하면 된다.
블루프린트를쓸때 지양해야 하는 점이 있는데 연속해서 toString을 쓰지 않는것 입니다. 결과 값은 같지만 구조를 한눈에 파악하기 어려워서 입니다.


위 처럼 노드를 설정하면 B가 50이 출력될지 40이 출력될지 알아보기 힘들다.


따라서 위에처럼 toString을 하나 더 달아줘서 좀더 바로 보기쉽게 짜주는걸 지향한다.