BluePrint

[Unreal 8기] 블루프린트를 이용한 비주얼 스크립팅

조현묵 2026. 2. 25. 15:03

1.언리얼 블루프린트

  •  1.1 프로젝트 환경설정
더보기
  •   프로젝트 생성
EpicGamesLauncher > 5.5.4 버전 실행.
게임,기본,블루프린트,Scalable,BlueprintStudy
더보기
  • 언리얼 환경설정
언리얼 에디터 최상단 > 편집 클릭 > 에디터 개인설정 클릭
에디터 개인설정 > 지역 & 언어 > 에디터 언어 와 에디터 로케일을 원하는언어로 지정

 

창 > 레이아웃 불러오기 > UE4 클래식 레이아웃 클릭 추후에 뭔가 에디터 배치가 잘못되었다면 되돌릴 수 있음

 

더보기
  •  새 레벨 만들기
콘텐츠 브라우저 > 콘텐츠 > 새폴더
"Maps" 폴더 생성
파일 > 새 레벨 클릭
기본 선택 후 생성 클릭
Ctrl + S > Maps 폴더에 "PlayGround" 라는 이름으로 레벨 저장
언리얼 에디터 최상단 > 편집 클릭 > 프로젝트 세팅 클릭
프로젝트 세팅 > 맵 & 모드 > 에디터 시작 맵, 게임 기본 맵을 PlayGround로 지정
  • 1.2 블루 프린트란?

**블루프린트(Blueprint)**란 언리얼 엔진에서 제공하는 비주얼 스크립팅 시스템.

복잡한 코드 작성없이, 노드 기반의 블럭을 연결해서 프로그래밍이 가능하게 하는 시스템.

현업에서는 프로토타입 구현 혹은 아트 및 기획자 팀원들이 컨텐츠 구현시 사용.

Unreal C++를 사용한다 해도 타 직군과의 협업에서는 블루프린트를 만날 수 밖에 없음.

 

2. 변수와 연산

  •  2.1 레벨 블루프린트
더보기
  •  레벨 블루프린트 열기
언리얼 에디터 > PIE버튼 옆옆 버튼 클릭 > 레벨 블루프린트 열기 클릭시 열수 있음
PlayGround 레벨의 레벨 블루프린트, Event Graph에서 우클릭은 드래그, 죄클릭은 그래프 이동 가능.
  • 2.2 이벤트 함수와 PrintString() 함
더보기

이벤트 함수: 어떤 사건(Event)이 발생하면 호출되는 함수.

  • BeginPlay : “게임 플레이의 시작”이라는 사건이 발생하면 호출되는 함수
  • Tick: “매 게임 프레임”마다 호출되는 함수

 

  • BeginPlay() 이벤트 함수와 PrintString() 함수 실습
PlayGround 레벨블루프린트 > 이벤트그래프 > 빈공간 우클릭 후 "Print String" .검색
BeginPlay 노드와 Print String 노드 사이에 실행선 연결 Print String 노드에 In String 매개변수에 "BeginPlay" 인자 작성
컴파일 및 저장
PlayGround 레벨탭 클릭 > Play In Editor 버튼 클릭
뷰포트에 BeginPlay가 출력되면서 성공
  • 2.3 블루프린트 변수
더보기
  • 변수(Variable)

        상수(값, Constant)를 저장할 수 있는 그릇.

        언리얼에서는 멤버변수를 “속성(Property)”이라고 많이 부름.

 

  • 블루프린트 변수 실습
내 블루프린트 > 변수 > :"blsGameStarted" 추가

보통 언리얼에선 대부분 변수 이름을 대문자로 시작함.

boolean 타입 같은 경우 소문자 b를 앞에 붙임

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

 

변수를 드래그 후 이벤트그래프에 드랍하면 Get, Set 노드를 얻을 수 있음
blsGameStarted 속성의 Get,Set 노드.
blsGameStarted 변수의 값을 true로 설정, 그리고 다시 해당 변수의 갑을 출력하는 예제.
PIE > 뷰포트에 "true" 라고 나옴
  • 2.5 블루프린트 연산 노드
더보기
  • 블루프린트 사칙 연산 노드 실습
내 블루프린트 > 변수 > "TickCount" 추가
디테일 에 기본값 0으로 초기화.
이벤트 그래프 > 빈공간 우클릭 > 사칙연산 기호 "+" 검색 > Add 노드 추
입력 값의 핀을 우클시 입력받을 값의 타입응 설정할 수 있음

 

노드 우측 하단 핀 추가 버튼을 누르면 입력 값의 개수를 늘릴 수 있음.

반대로 입력 값을 지우고 싶다면 핀 우클릭 후 핀 제거를 클릭.

 

이벤트 그래프
뷰포트에 매 틱마다 호출 됨
      • 비교 연산 노드
      • 블루프린트에서 비교 연산자는 두 값을 비교하여 참 또는 거짓을 반환하는데 사용.
      • 노드 생성 방법은 사칙 연산과 동일하게 레벨 블루프린트 화면에서 우클릭 후 기호를 검색
연산자 설명
== 두 값이 같은지 비교
!= 두 값이 다른지 비교
< 첫 번째 값이 두 번째 값보다 작은지 비교
> 첫 번째 값이 두 번째 값보다 큰지 비교
<= 첫 번째 값이 두 번째 값보다 작거나 같은지 비교
>= 첫 번째 값이 두 번째 값보다 크거나 같은지 비교
  • 논리 연산 노드
  • 블루프린트에서 논리 연산은 여러 조건을 조합하거나 반전하여 복잡한 논리적 흐름을 처리할 때 사용.

 

연산자 설명
AND 두 조건이 모두 참일 때만 결과가 True가 됩니다.
OR 두 조건 중 하나라도 참이면 결과가 True가 됩니다.
NOT 조건의 결과를 반대로 만듭니다.
XOR 두 조건 중 하나만 참일 때 True가 됩니다.
→ true(1) 1의 개수가 홀수개면 true. 짝수개면 false

3. 흐름 제어 - 1

  • 3.1 Branch와 Sequence
더보기
  • Branch와 Sequence 실습
이벤트 그래프 > 빈공간 우클릭 > "Branch" 검색

 

Branch는 Condition 매개변수가 True냐 False냐에 따라 실행 흐름을 나눌 수 있는 노드. if -else 조건문과 동일함.
이벤트 그래프 > TickCuint 와 Branch 노드 실습
"Sequence" 검색
Sequence 는 실행을 순차적으로 실핼시켜주는 노드.
이벤트그래프, Sequence 노드 실습
  • 입력 관련 이벤트 함수
"Mouse Events :Left Mouse Button" 클릭
마우스 입력 실습
"Keybord Events R" 클릭
키보드 입력 실습
  • 3.2 텍스트 슈팅 게임
더보기
  • 텍스트 슈팅 게임 기획

지금까지 배운 블루프린트의 기능을 이용하여 간단한 텍스트 슈팅 게임을 만들어보자.

텍스트 슈팅 게임의 주요 기능은 총알을 발사하고, 재장전하는 것.

기본적으로 해당 기능들은 아래 조건을 만족한다고 가정해보자.

  • 총알은 기본적으로 30발.
  • 마우스 좌클릭을 할 때마다 총알이 1발씩 소모됨.
  • 키보드 R을 누르면 재장전되어 총알 30발로 충전됨.

 

  • 총알은 기본적으로 30발
변수 > "Bullet" 추가
컴파일 후 30으로 수
  • 마우스 좌클릭을 할 때마다 총알이 1발씩 소모됨.
이벤트 그래프
  • 키보드 R을 누르면 재장전되어 총알 30발로 충전됨.
이벤트 그래프

 

쏠 때마다 현재 총알의 개수를 화면에 출력 이벤트 그래프
  • 3.3 1번 과제: 텍스트 슈팅 게임 버그 고치기
더보기

지금까지 구현한 텍스트 슈팅 게임에는 버그들이 존재함.

그 중 가장 중요한 버그 두 가지를 고쳐보자.

 

  • 1) 30발 이상 격발 할 수 있는 버그
이벤트 그래프
  • 2) 총알이 가득차 있는 경우에도 재장전 되는 버그
이벤트 그래프
  • 3.4 2번 과제: 텍스트 슈팅 게임 기능 추가하기
더보기

총알을 발사하고 장전만 할 수 있는 게임은 너무 지루함.

두 가지 추가 기능을 구현해보자.

 

  • 1) 과열 상태 추가

 

  • 2) 쿨다운 기능
이벤트 그래프
  • 3.5 함수
더보기

거의 유사한 온도 관련 블루프린트 코드가 두 곳에 존재합니다.

이런 경우에 보통 함수로 만들어서 묶어둡니다.

코드를 묶어서 하나의 함수로 만들어봅시다.

 

  • 함수 만들기
함수 > "SetTemperature" 생성
입력 > Inlncrement 추가
이벤트 그래프
코드 재사용성을 높힘

 

4. 흐름제어 - 2

  • 4.1 While Loop와 For Loop
더보기

많은 프로그래밍 언어에서 반복문이라는 문법이 존재함.

블루프린트에서 반복문을 연습해보도록 하자.

반복문을 구현하는 노드는 다양하지만,

여기서는 While Loop와 For Loop 노드를 사용해보고자 함.

  • While Loop
"While Loop" 검색
Condition의 값이 true이면 Loop Body가 계속 실행됨
이벤트그래프 While Loop 실습.

 

  • For Loop
"For Loop" 검색
First Index의 값부터 Last Index까지 Loop Body 가 계속해서 실행되는 노드

 

이벤트 그래프
  • 4.2  Array와 ForEach Loop
더보기
  • Array 실습
"Weapons" 추가
변수 타입을 배열로 변경
기본값에 "Rifle","Shotgun","Pistol" 추가
  • ForEach Loop 실습
"For Each Loop" 검색
Array를 처음부터 끝까지 순회하는 반복문 노드
For Each Loop 노드 실습
  • 4.3 열거형과 구조체 그리고 Switch
더보기
  • 열거형(Enum)

        정수형 상수에 이름을 부여해서 모아둔 것을 열거형이라고 함.

  • 열거형 만들어보기
Data 폴더 만들기
블루프린트 > 열거형 선택
열거형에 Normal,High,Over 추가
변수에 NewCurrentHeatState 추가
기본 노말로 설정
기존에 있던 CurremtHeatState를 NewCurrentHeatState 로 교체

 

  • 관전 포인트 2개
  1. 왜 String 자료형의 CurrentHeatState에서 Enum 자료형으로 바꿔야할까? Enum은 결국 정수처리 되기때문에 Enum 간의 비교시에 O(1) 속도로 가능. String은 내부적인 처리가 없는 한, 한글자씩 비교해야함.
  2. 지금처럼 수정해야하는 SetTemperature 함수로 코드를 묶어두지 않았다면, 이전처럼 이곳 저곳에 똑같은 코드가 있는 그 위치를 모두 찾아서 CurrentHeatState를 NewCurrentHeatState로 교체해줬어야함. 지금은 함수로 묶어놨기에, 해당 함수 로직만 수정해주면 모든 위치에서 로직이 수정됨. 함수는 유지보수에도 강점이 있음.
  • Switch
Swich 노드를 가져오려면, Switch on + Enum 자료형
Switch on 노드는 매개변수에 Selection에 어떤 값이 들어 왔냐에 따라 실행 흐름을 분기함
  • 구조체(Structure)

       언어 스팩 상에 미리 구현되어 있는 Native type(int, float, double, …)이 아니라

       프로그래머가 필요에 따라 자료형을 만들 수도 있음. 이것이 구조체.

  • 구조체 만들어보기
  •  
블루프린트 > 구조체 선택
변수 추가
변수 "NewWeapons"
변수타입 배열 자료형으로 변환

 

3개 요소 추가
  • 4.4  3번 과제: 텍스트 슈팅 게임 무기 추가하기
더보기
  • 1) 무기 추가하기

0번을 누르면 라이플, 1번을 누르면 샷건, 2번을 누르면 피스톨로 교체됩니다.

격발하면 현재 무기의 총알만 소모하고, 과열 상태도 현재 무기만 과열됩니다.

이벤트 그래프
이벤트 그래프
이벤트 그래프