본문 바로가기

블루프린팅/2. 블루프린트 프로그래밍

블루프린트 스크립트언어

언리얼 엔진의 비주얼 스크립팅 시스템인 Blueprint (블루프린트)는 언리얼 에디터 안에서 노드 기반 인터페이스를 사용하여 게임플레이 요소를 만드는 개념을 토대로 한 비주얼 스크립팅 시스템입니다. 일반적인 스크립팅 언어와 마찬가지로, 엔진 내 객체 지향형(OO) 클래스 또는 오브젝트를 정의하는 데 사용됩니다. UE4 를 사용하다 보면, 블루프린트를 사용하여 정의된 오브젝트를 그냥 일상적으로 "블루프린트" 라 하는 경우가 많습니다.

이 시스템은 매우 유연하고 강력해서, 보통은 프로그래머가 없으면 힘들었던 개념 구현이나 툴 작업 거의 전부를 디자이너 스스로 해낼 수 있게 되었습니다. 게다가, 언리얼 엔진의 C++ 구현에서 가능한 블루프린트 전용 마크업을 통해 프로그래머가 어떤 기반 시스템을 제작하면, 디자이너가 그것을 확장하는 것도 가능합니다.블루프린트 작동방식

기본적인 형태의 블루프린트는 시각적인 스크립팅으로 게임에 추가되는 것입니다. 노드, 이벤트, 함수, 변수 등을 선으로 연결하여 복잡한 게임플레이 요소를 만드는 것이 가능합니다.

블루프린트는 오브젝트 생성, 개별 함수, 일반적인 게임플레이 이벤트 등 각각의 블루프린트 인스턴스에 고유한 여러가지 목적의 노드 그래프를 사용하는 식으로 작동합니다.

흔히 사용되는 블루프린트 유형

가장 흔히 작업하게 되는 블루프린트 유형은 레벨 블루프린트  블루프린트 클래스 입니다.

레벨 블루프린트

레벨 블루프린트는 언리얼 엔진에서 키즈멧의 역할을 대체하는 것으로, 기능 역시 똑같습니다. 각 레벨마다 별도의 레벨 블루프린트가 있으며, 여기서 레벨에 있는 액터를 가리키고 조작하며, 마티네 액터를 사용해서 시네마틱을 제어하고, 레벨 스트리밍, 체크포인트, 기타 레벨 관련 시스템같은 것들을 관리합니다. 레벨 블루프린트는 레벨에 배치된 블루프린트 클래스와의 상호작용을 통해 들어있는 커스텀 이벤트를 발동시키거나 변수를 읽고 설정하는 등의 작업도 가능합니다 (예제는 다음 섹션을 참고해 주세요).

블루프린트 클래스

블루프린트 클래스는 문, 스위치, 수집가능 아이템, 파괴가능 배경과 같은 상호작용형 애셋을 만드는 데 좋습니다. 위 그림에서 버튼과 문짝은 각각 별도의 블루프린트로, 거기에는 플레이어 오버랩 이벤트에 반응, 애니메이션, 사운드 이펙트 재생, 머티리얼 변경 (즉 버튼을 누르면 불이 켜지는) 등에 필요한 스크립트가 들어있습니다.

이 경우 버튼을 누르면 문 블루프린트 안에서 이벤트를 활성화시켜 열리게 만들지만, 문 자체는 다른 블루프린트 유형이나 레벨 블루프린트 시퀀스로도 쉽게 활성화시킬 수 있습니다. 블루프린트의 자립적인 특징때문에 별다른 설정 없이 레벨에 그냥 끌어 놓기만 해도 작동되도록 만들 수 있습니다. 즉 프로젝트에 사용중인 블루프린트를 편집하면 그 인스턴스 전부가 업데이트된다는 뜻이기도 합니다.

블루프린트로 또 어떠한 작업이 가능한가요?

레벨 블루프린트와 블루프린트 클래스에 대한 설명 다음에는 블루프린트 시스템으로 가능한 작업에 대한 예제를 알아보겠습니다.

컨스트럭션 스크립트로 커스터마이징 가능한 프리팹 생성

Construction Script(컨스트럭션 스크립트)는 블루프린트 클래스 내 그래프 유형 중 한 가지로, 게임에서는 실행되지 않지만 에디터에서 액터가 배치 또는 업데이트될 때 실행되는 것입니다. 배경 아티스트의 작업 속도를 높일 수 있도록 쉽게 커스터마이징 가능한 소품을 만들기에 좋은데, 이를테면 포인트 라이트 컴포넌트의 색과 밝기에 일치되도록 머티리얼이 자동 업데이트되는 조명기구라든가, 일정 영역에 폴리지 메시를 임의로 흩뿌리는 블루프린트 정도입니다.

콘텐츠 예제 맵에 (위 그림처럼) 각각의 예제가 들어있는 긴 방은 사실 다수의 컴포넌트로 구성된 하나의 블루프린트입니다. 블루프린트의 컨스트럭션 스크립트는 블루프린트의 디테일 패널에 노출된 파라미터에 맞도록 다양한 스태틱 메시와 라이트를 생성 및 배치합니다. 저희가 각 콘텐츠 예제 맵을 제작할 때마다 데모 룸 블루프린트를 끌어 놓은 다음 생성하려는 방의 길이, 높이, 방 갯수(와 몇 가지 추가 옵션) 값을 입력하면 바로 완성된 방 세트를 얻을 수 있었습니다.

이러한 블루프린트 제작은 초기에 시간이 조금 걸릴 수 있지만, 자주 사용할 것이 확실하다면 레벨 제작시 단축되는 시간과 사용 편의성 증대를 고려해 볼때 매우 가치가 높은 일이 될 수 있습니다.

플레이가능 게임 캐릭터 생성

Pawns (폰) 역시도 블루프린트 클래스의 유형 중 하나로, 블루프린트 그래프에서 플레이가능한 캐릭터를 만드는 데 필요한 모든 요소를 한 데 모을 수 있습니다. 카메라 작동방식 조작, 마우스, 컨트롤러, 터치 스크린에 대한 입력 이벤트 셋업, 스켈레탈 메시 애니메이션 처리를 위한 애니메이션 블루프린트 애셋 생성이 가능합니다.

캐릭터 블루프린트를 새로 만들 때 이동, 점프, 수영, 낙하 등에 필요한 동작 대부분이 내장되어 있는 캐릭터 컴포넌트가 딸려오므로, 캐릭터 제어를 어떻게 했으면 좋겠는지 입력 이벤트만 조금 추가해 주면 됩니다.

HUD 생성

블루프린트 스크립트는 게임의 HUD 를 만드는 데도 사용되는데, 이벤트 시퀀스와 변수가 포함된다는 점에서는 블루프린트 클래스와 비슷하지만, 레벨에 바로 추가되기 보다는 프로젝트의 GameMode 애셋에 할당된다는 차이가 있습니다.

다른 블루프린트에서 변수를 읽어 체력 표시 막대에 사용한다든가, 점수를 업데이트한다든가, 오브젝트 마커를 표시한다든가 하는 식으로 HUD 구성이 가능합니다. 클릭 또는 모바일 게임의 경우 터치 가능한 버튼같은 요소에 들어가는 히트박스를 추가하기 위한 용도로 HUD 를 사용하는 것도 가능합니다. 블루프린트로도 가능하지만, 언리얼 모션 그래픽 (UMG) 시스템이 보다 디자인 친화적인 방식의 UI 레이아웃 작업이 가능하며, 블루프린트 비주얼 스크립팅 기반입니다.

 

블루프린트 에디터와 그래프

레벨 블루프린트나 블루프린트 클래스를 만들 때는 블루프린트 에디터 레퍼런스 에서 블루프린트 요소 들을 조합하게 됩니다.

작업중인 블루프린트 유형에 따라 사용할 수 있는 블루프린트 에디터 유형이 달라집니다. 블루프린트 에디터 의 가장 핵심적인 기능은 그래프 모드로, 중앙의 그래프 탭은 블루프린트 망의 레이아웃에 사용됩니다.

이번 장에서는 블루프린트에서 사용되는 기본프로그래밍 개념을 설명한다.  블루프린트는 노드 기반 인터페이스를 사용해서 시각적인 프로그래밍을 제공한다.  

 

변수

 

콘텐츠드로어를 클릭해 Blueprints폴더의 BP_RotationChair를 클릭

블루프린트에디터가 열리면 왼쪽 내블루프린트탭안에 변수탭이 있고 +를 눌러 변수를 만들수 있습니다.

변수를 생성하면 해당 속성이 디테일 패널에 표시된다. 이름과 타입 속성이 있습니다.

이벤트 및 액션으로 블루프린트 동작 정의

대부분의 경우 블루프린트를 사용해서 새로운 액터들을 생성할 것이다. 액터는 레벨에 추가할 수 있는 게임 객체다.

언리얼 엔진은 이벤트를 사용해서 액터의 게임 상태를 알려준다. 액터가 액션을 사용해서 이벤트에 대응하는 방법을 정의한다. 이벤트와 액션은 모두 이벤트그래프 패널의 노드로 표시된다.

 

이벤트

이벤트그래프 패널에 우클릭으로 이벤트및 액션을 추가할 수 있다. 이벤트의 종류는  충돌, 입력, BeingPlay, 이벤트플레이종료, 이벤트틱등이 있다.

액션 : 이벤트가 트리거되면 어떻게 반응할지 정의된 함수

실행경로 : 노드의 흐름을 지정

연산자 : 산술연산자, 관계연산자, 논리연산자

 

매크로및 함수를 사용해서 스크립트 구성

내블루프린트의 마크로탭옆 +를 눌러 이름을 testMacro로 바꿔준다.

WaveNumber, CurrentWave, EnemyCount 인테저 변수를 만든다.

만들어진 변수를 이벤트판넬에 끌어다 놓으면 Set을 선택하면 판넬에 SET 노드가 준비된다.

 

다만들어진 매크로는 이름을 이벤트뷰로 끌어다 놓으면 된다.

함수

다음과 같은 계산을 하는 CalculateWaveBonus함수를 만들어 보겠다.

CalculateWaveBonus() {
    int WaveNumber, TimeLeft;
    int bonusPoint = WaveNumber*100 + TimeLeft * 15;
    return bonusPoint;
}

내 블루프린트 함수탭의 +를 눌르면 새함수의 이름을 CalculateWaveBonus로 변경한다

오른쪽 디테일패널에 입력과 출력변수를 추가한다.

CalculateWave Tab에 우클릭후 연산자 검색후 곱하기와 추가 노드를 추가한후 다음과 같이 연결및 설정한다.

함수가 완성되었으면 탭을 닫고 내 블루프린트의 함수탭의 CalculateWaveBonus를 끌어다 이벤트그래프에 놓으면 

 

'블루프린팅 > 2. 블루프린트 프로그래밍' 카테고리의 다른 글

[블루프린트] 키보드입력  (0) 2023.05.07
함수 만들기  (1) 2023.05.05
[블루프린트] 매크로 만들기  (3) 2023.05.05
액터 레퍼런스 Set / Get  (0) 2023.05.05
블루프린트 변수  (1) 2023.05.05