1. 블루프린트의 개요
블루프린트는 코딩을 하지 않는다는 것만 다를 뿐 스크립트를 만드는 논리는 프로그래밍 언어로 작성하는 것과 똑같습니다. 언리얼 엔진에서 블루프린트를 사용하는 목적은 ‘사람이 다가가면 자동으로 열리는 문’ 등과 같이, 액터(Game Object)에 소스 코드를 연결하는 과정을 편하게 하기 위해서이지, 쉬운 코딩을 하기 위한 수단은 아닙니다. 따라서 개발자는 C/C++이나 Java 등의 프로그래밍 언어에 대한 최소한의 기본 문법 정도는 알고 있어야 합니다.
블루프린트는 순서도처럼 노드를 연결해서 프로그램의 논리를 표현합니다. 따라서 전체적인 흐름이 이해하기 쉬운 장점이 있지만, 논리가 복잡해지면 아주 커다란 그래프를 만들어야 하므로 오히려 이해하기 어려운 프로그램이 될 수 있습니다.
프로그래밍 언어로 작성된 소스나 스크립트 등은 강좌의 소스를 긁어다 붙이는 Cut & Paste를 할 수 있지만, 블루프린트는 그게 안되므로 게으른 개발자들에게는 쥐약(?)입니다. 당연히 앞으로 진행되는 강좌의 모든 블루프린트는 붙여넣기가 안되므로 여러분이 직접 작성하셔야 합니다.
2. 블루프린트의 작성 규칙
블루프린트는 다음과 같은 규칙으로 작성합니다.
① 블루프린트의 기본 단위는 노드이다.
② 노드와 노드 사이는 제어(명령)와 데이터가 전송되며, 제어와 데이터의 흐름은 선(Wire)으로 연결한다.
③ 제어는 ‘▶’ 핀을 사용하고 데이터는 ‘●’ 핀을 사용한다.
④ 제어와 데이터는 왼쪽에서 오른쪽으로 진행된다.
⑤ 입력 및 출력이 있는 노드는 입력핀이 왼쪽에 출력핀은 오른쪽에 있다.
⑥ 제어의 흐름선은 흰색으로 표시되고, 데이터의 흐름선은 자료의 형(Type)에 정의된 색으로 표시된다.
아래 그림의 데이터 흐름선은 실수(float)형 자료이다.
3. 블루프린트 노드의 종류
블루프린트의 노드는 다음과 같은 것들이 있습니다.
(1) 이벤트
이벤트(Event)는 특정한 사건이 발생했음을 알리는 신호입니다. 이벤트가 발생하면 그 이벤트를 처리하는 일련의 절차가 필요합니다. 예를 들어 적이 총에 맞았을 때 적과 총알이 충돌하는 것은 이벤트이고, 적이 쓰러지고 득점이 표시되는 것은 이벤트의 처리입니다. 블루프린트는 대부분 이벤트로부터 시작하며, 이벤트 노드는 빨간색으로 표시됩니다. 다음은 이벤트 노드와 이벤트 발생 조건의 예입니다.
(2) 변수
사용자가 임의로 만들어 사용하며 특정한 값을 저장합니다. 다음과 같은 종류(Type)의 변수가 있습니다.
Type | 값의 범위 | 설명 |
bool byte int float name string text Vector Rotator Transform struct object interface class Enum |
예/아니오 0~255 대략 ±21억 이내의 정수 정밀도 7자리 이내의 실수 액터의 이름 문자열 문자열 (x, y, z) 또는 RGB값 3D 공간의 회전량 위치, 회전, 스케일 정보 구조체 액터 등의 오브젝트 인터페이스 포인터 클래스 포인터 열거형 |
True 또는 False 값을 갖는 유형 1바이트로 표현할 수 있는 값 -214,7483,648 ~ 214,7483,647 -3.4×10-38 ~ 3.4×1038 영숫자, 한글, 특수문자로 된 문자열 현지화가 가능한 텍스트 3개의 실수(float)로 이루어진 자료 Pitch, Yaw, Roll 성분을 갖는 구조체 액터의 위치, 회전, 스케일 비율 복합된 자료(Rotator도 구조체이다) 카메라, 라이트, 스태틱 메시 등 순서적인 값을 갖는 자료 |
다음은 변수의 종류와 변수에 할당된 컬러의 예입니다. 변수의 유형(Type)은 언리얼 엔진의 버전에 따라 한글이나 영문으로 표시됩니다.
(3) 연산자
사칙 연산이나 값을 비교하기 위한 노드입니다. 연산자는 피연산자를 입력받는 핀과 연산 결과를 반환하는 핀으로 구성되어 있으며, 자료의 유형(Type)에 따라 사용하는 연산자가 다릅니다. 연산자의 자료 유형은 핀의 색으로 구분됩니다. 다음은 수식에 사용하는 연산자의 예입니다.
연산은 왼쪽에서 오른쪽으로 진행되며, 왼쪽 연산이 완전히 끝난 후 오른쪽 연산을 하므로 연산자의 우선순위는 적용되지 않습니다. 예를 들어 5+3÷2는 수학의 경우 ‘÷’가 ‘+’보다 우선순위가 높으므로 5+(3÷2)로 계산되지만, 블루프린트의 연산은 왼쪽의 연산자가 오른쪽 연산자보다 우선순위가 높으므로 (5+3)÷2로 계산됩니다.
(4) 함수
데이터를 입력받아 정해진 절차를 수행한 후 결과를 반환하는 노드입니다. 대부분의 함수는 하나 이상의 값을 입력받아 하나 이상의 값을 반환하므로 입력과 출력핀이 각각 있습니다. 언리얼 엔진에는 매우 다양한 함수가 내장되어 있으며, 특정한 처리를 하는 함수를 사용자가 직접 만들 수도 있습니다. 다음은 블루프린트에서 사용하는 함수의 예입니다.
(5) 제어 노드
조건에 따라 다른 처리를 하거나(if) 특정한 부분을 반복(for), 또는 각각의 값에 따른 선택(switch) 등 제어의 흐름을 바꾸는 노드입니다. 다음은 제어 노드의 예입니다.
(6) 시간 관련 노드
시간의 흐름에 따라 특정한 처리를 하기 위한 노드입니다. 다음은 시간 관련 노드의 예입니다.
(7) 형변환(Type Casting) 노드
자료의 형(Type)을 강제로 바꾸기 위한 노드로, 대부분 자동으로 추가됩니다. 예를 들어 실수형 변수에 정수를 대입하면 정수가 실수형으로 형변환(Type Casting)되어 대입됩니다. 모든 경우에 자료의 형이 바뀌는 것은 아니고, 작은 값이 큰 값으로 변환되는 것만 가능합니다. 예를 들어 실수형 자료는 정수형으로 형변환하는 것이 불가능하므로 Floor(절삭), Round(반올림) 등의 함수를 이용해서 정수로 변환한 후 사용합니다. 다음은 형변환 노드의 예입니다.
4. 변수의 Get과 Set
변수 노드는 Get과 Set이 있습니다. Get은 변수의 값을 읽는 동작이고 Set은 변수에 값을 저장합니다.
Get은 값이지만 Set은 명령입니다. 따라서 Set 노드의 왼쪽 ‘▷’ 핀에 명령(또는 이벤트)을 연결하지 않으면 동작하지 않습니다. 그러므로 위의 그래프는 실제로는 작동하지 않을 것입니다. Set 노드의 출력핀은 언리얼 엔진 4.7에 추가된 기능이므로 4.6.1 버전은 Set 노드에 출력핀이 없습니다.
5. 블루프린트의 종류
블루프린트는 다음과 같은 종류가 있습니다.
① 레벨 블루프린트
게임의 모든 레벨(씬)에 하나씩 할당되어 있는 블루프린트이다. 레벨에 설치된 각종 액터와 상호 작용을 통해 게임을 진행해 간다. 레벨의 메인 프로그램에 해당하며, 레벨 블루프린트는 다른 레벨의 내용은 참조할 수 없다.
② 게임 모드 블루프린트
게임의 모드와 게임의 설정 등을 위해 사용한다. 개발자가 게임 모드 블루프린트를 만들지 않으면 언리얼 엔진에 마련되어 있는 GameMode 블루프린트가 사용된다.
③ 클래스 블루프린트
씬에 설치할 각종 액터, 사운드, 카메라, 파티클 등에서 발생하는 이벤트와, 움직이는 액터의 동작 등을 처리하기 위해 사용한다. 클래스 블루프린트는 액터에 하나씩 할당할 수 있다. 블루프린트가 할당된 액터를 블루프린트 액터라고 하며, 블루프린트 액터를 씬에 설치하면 블루프린트에 설정한 절차대로 동작한다. 예를 들어 사람이 접근하면 자동으로 켜지는 전등, 스위치를 누르면 작동하는 엘리베이터 등을 블루프린트 액터로 만들면 전체적인 구성이 간단해질 것이다. 게임 제작에 필요한 블루프린트의 거의 대부분이 클래스 블루프린트이며, 우리가 앞에서 만든 B_Sky도 클래스 블루프린트이다.
④ 블루프린트 인터페이스
다른 블루프린트와 데이터를 공유하고, 이벤트를 발생하기 위해 작성한 블루프린트로, 함수 이름만 모아둔 것이다.
⑤ 블루프린트 매크로 라이브러리
매크로는 반복되는 일련의 절차를 별로의 그래프로 만들어 둔 것으로, 매크로 라이브러리는 블루프린트 매크로를 모아둔 것이다. 매크로 라이브러리에 수록된 매크로는 각각의 블루프린트에 추가할 수 있다.
⑥ 위젯 블루프린트
게임의 UI를 만들기 위한 블루프린트이다.
너무 좋은 내용이라 티스토리 포스팅함
저작자 : [동영상과 함께하는 언리얼엔진4 블루프린트 게임만들기]
'🅿🆁🅾🅶🆁🅰🅼🅼🅸🅽🅶 > ETC.ғᴏʀ ᴅᴇᴠᴇʟᴏᴘᴇ' 카테고리의 다른 글
잡다한 링크 백과(개발) (0) | 2022.04.05 |
---|---|
[UnrealEngine]-DebugDiary - 에셋 이주 오류, 내용물 깨짐 현상 / Asset migration error / move asset error (0) | 2022.01.22 |
개발 참고 링크(공개 보호) (0) | 2021.11.29 |