2017년 2월 13일 월요일

[언리얼4 RPG제작 2-1] 블루프린트 시스템

Part2에서는 언리얼 엔진에서 게임을 구성하는 요소들에 대해 기록할 예정이다.
이번 파트부터는 캐릭터가 등장하면서 점점 RPG스럽게 프로젝트가 업그레이드 될 예정이다. 그래서 RPG 프로젝트답게 중세 분위기에서 작업을 진행해보겠다. 시작하기 전에 아래 링크에 접속해 이번 파트에서 사용할 리소스를 다운 받는다.

리소스 링크 : http://bit.ly/bp_rpgasset2

다운을 받아 압축을 풀면 하위에 있는 AssetProject 폴더에 별도의 언리얼 프로젝트가 있음을 확인할 수 있다. 폴더에 있는 Lesson2Asset.uproject 파일을 더블클릭하여 준비된 언리얼 프로젝트를 띄워보자. 그러면 기존에 작업하던 프로젝트와 새로운 프로젝트 두 개의 언리얼 에디터가 뜬다.

[그림] 두 개의 언리얼 프로젝트


이주(Migration) 기능

진행을 위해 다운받은 새로운 프로젝트에서 사용할 애셋을 복사해옵시다. 새로운 프로젝트에 있는 Lesson2 폴더가 새롭게 사용할 리소스들 인데, 이를 기존에 작업던 프로젝트로 옮겨오기 위해 우클릭하고 애셋 액션에서 이주(Migration)를 선택하자.

[그림] 이주 메뉴

이주는 현재 프로젝트에서 사용하는 리소스를 다른 프로젝트로 옮길 때 사용하는 기능이다. 이주 기능은 단순히 선택한 리소스를 복사하지 않고, 현재 리소스에 연관된 다른 리소스까지 모두 모아 사용자가 지정한 다른 프로젝트로 옮겨준다. 주의할 점은 이주 대상을 지정할 때에는 옮길 프로젝트의 대표 폴더를 선택하는 것이 아닌 그 아래에 있는 Content 폴더를 선택해야 한다. Content 폴더를 선택하여 오른쪽 하단에 이주가 성공적으로 끝났다는 메시지가 뜨면 이제 작업 중인 프로젝트로 돌아가자. 작업 프로젝트의 콘텐츠 브라우저에서 Lesson2와 그 하단의 폴더들이 잘 들어왔는지 확인되면, 이제 리소스 프로젝트는 역할을 다 했으니 종료한다.

[그림] 리소스의 이주 결과


블루프린트(Blueprint)

이제 준비가 되었으니 시작하겠다. 이번 에는 언리얼 엔진의 핵심 기능인 블루프린트(Blueprint)에 대해 정리하겠다. 언리얼 엔진의 블루프린트는 복잡한 액터를 설계하도록 고안된 설계 시스템을 의미한다. 지금까지 사용한 액터는 하나의 단순한 기능만 가진 액터였습다. 스태틱 메시 리소스를 드래그해 배치해왔던 스태틱 메시 액터는 하나의 스태틱 메시 리소스만 사용하는 액터다. 아래 그림과 같이 물, 라이트, 돌, 풀 등의 다양한 요소를 가진 하나의 분수대를 만든다고 가정하자.

 [그림] 조금 복잡한(?) 분수대 예시

위의 분수대에는 분수대, 물, 풀, 돌, 라이트의 총 다섯 개 액터가 사용되었다. 하지만 배경에서 이러한 분수대를 자주 사용해야 한다고 가정하면, 분수대를 10개만 배치해도 50개의 액터를 배치해야 한다. 하지만 5개의 액터가 가지는 기능을 모두 조합해 하나의 액터로 만들 수 있다면 어떨까? 하나의 분수대 역할을 수행하는 액터를 만들어 놓으면 50개의 액터를 조정할 필요 없이 레벨에는 10개의 액터만 배치하면 된다. 차후에 분수대의 기획이나 아트가 변경되면 어떻게 될까? 전자의 경우 50개를 보면서 일일히 고쳐줘야 하는 반면, 후자는 액터의 조합 설정만 변경하면 연관된 액터들을 모두 자동으로 업데이트된다. 이렇게 액터의 배치와 관리를 편리하게 하기 위해 언리얼 엔진이 제공하는 설계 기능이 블루프린트(Blueprint)다.

[그림] 블루프린트의 개념

그러면 새로운 맵에서 직접 블루프린트를 제작해보자. [파일 > 새 레벨] 메뉴를 선택해 Default 템플릿을 사용해 새로운 레벨을 생성하고 기본으로 주어지는 Floor 액터를 제거하고. 대신 콘텐츠 브라우저 [ Lesson2 > Floor ] 폴더에 있는 SM_MergedFloorBig 스태틱메시를 배치하여 분위기를 바꿔보자. 시작 지점이 새로운 바닥의 가운데로 오도록 디테일에서 좌표를 직접 입력해 옮겨본다. 나는 좌표를 ( -1500, 1500, -113)로 하였다. 이제 새로운 이름으로 레벨을 저장하고 플레이를 누르면 중세풍의 돌 바닥에서 여러분들이 돌아다닐 수 있게 된다.

[그림] 기본 바닥의 생성

이번에는 Fountain 폴더로 가서 준비된 분수대와 물을 배치한다. 먼저 분수대를 드래그하여 배치한 후 물도 드래그하여 추가로 배치한다. 물의 위치를 잡기 편하게 하기 위해 배치된 물 액터를 분수대 액터에 드래그해 분수대 액터의 자식으로 계층 구조를 들어보자. 일단 자식으로 계층 구조를 만든 후, 아래와 같이 X와 Y값은 0으로 고정하고 Z축으로만 136cm 올려주면 그림과 같이 물이 흐르는 분수대가 완성된다.

[그림] 기본 분수대의 설정

이번에는 동일한 기능을 가진 분수대 블루프린트를 제작해보자. 콘텐츠 브라우저에서 블루프린트를 보관할 Blueprints라는 폴더를 생성한다. 생성한 폴더를 선택하고 콘텐츠 브라우저의 신규 추가와 블루프린트 클래스 메뉴를 선택하면 부모 클래스 선택이라는 다이얼로그가 뜬다. 잠깐 여기서 부모 클래스란 무엇일까? 어떤 물체를 제작하기 위해 고안한 설계도인 블루프린트와 유사한 개념을 프로그래밍 용어로는 클래스(Class)라고도 한다. 부모 클래스를 선택한다는 의미는 목표로 하는 물체를 쉽게 만들기 위해 누군가에 의해 미리 만들어 둔 기능을 활용하고, 거기에 없는 기능을 추가해 제작한다는 것을 의미한다.  ( 왜 언리얼 엔진은 유사한 블루프린트와 클래스라는 용어를 혼용해 사용할까요? 둘의 구조와 용도가 사실 미묘하게 다른데, 중요한건 프로그래머가 아니라면 앞으로 클래스라는 단어를 사용할 일이 없으니 크게 집착하지 않아도 된다. )

 [그림] 부모 클래스와 블루프린트의 상관 관계

아무튼, 가장 상단의 액터를 선택하면, 액터를 설계할 수 있는 블루프린트 리소스가 생성되는데, 이 블루프린트의 이름을 BP_Fountain이라고 제작하자. 리소스 이름은 차후에 F2키를 눌러서 변경이 가능하다.

[그림] 완성된 블루프린트


컴포넌트(Component)

이를 더블클릭하면 블루프린트 에디터가 뜬다. 블루프린트 에디터가 뜨면 텅 빈 것을 볼 수 있는데, 이 액터에 분수대가 되기 위해 필요한 기능을 부여해주어야 한다. 이를 위해서 알아야 할 개념이 컴포넌트(Component)다.
언리얼 엔진은 게임 제작에 필요한 정말 많은 기능을 엔진을 제작한 엔지니어들이 오랜 기간 동안 만들어왔는데, 이번에 만들 액터를 제작하는데 이들을 쓰기 위해 표준 규격으로 정리하고 종류별로 분류해놓았다. 이렇게 액터에 사용할 수 있게 규격화된 기능 모듈을 컴포넌트라고 한다. '컴포넌트 추가' 버튼을 눌러 보이는 여러 컴포넌트 중에서 스태틱 메시를 보여주는 모듈은 스태틱 메시 컴포넌트다. 컴포넌트 추가버튼을 누른 후 스태틱 메시 컴포넌트를 추가하고 이름을 FountainBody라고 짓는다.

[그림] 스태틱 메시 컴포넌트의 추가

추가한 스태틱 메시 컴포넌트를 선택하면 디테일 윈도우에서 스태틱 메시를 지정해야 한다. SM_Plains_Castle_Fountain_01 스태틱 메시를 선택해 스태틱 메시 컴포넌트의 세팅을 완료하자. 항상 블루프린트를 작업하고 마무리할 때에는 툴바에 있는 컴파일, 저장버튼을 꼭 눌러주자.

[그림] 스태틱 메시 컴포넌트의 설정 결과


루트 컴포넌트(Root Component)

블루프린트에서 컴포넌트의 최상단에 위치해 액터를 대표하는 컴포넌트를 루트 컴포넌트(Root Component)라고 한다. 액터를 제작할 때에는 반드시 하나의 루트 컴포넌트가 필요하다. 그래서 블루프린트를 처음 만들 때에는 아무 기능이 없는 기본 씬루트컴포넌트가 설정되어 있다. 여기엔 분수대 액터를 대표할 스태틱 메시 컴포넌트를 하나 제작했으니, 이를 루트 컴포넌트로 대체하자. 루트 컴포넌트로 대체하는 방법은 FountainBody 컴포넌트를 씬루트컴포넌트로 드래그하면 된다. 이제 분수대에 추가로 물을 표현하기 위해 새로운 스태틱 메시 컴포넌트를 추가한다. 추가된 컴포넌트는 자식으로 붙음을 확인할 수 있다. 액터에 루트 컴포넌트는 하나만 존재할 수 있으며, 이후에 생성되는 컴포넌트는 모두 루트의 자식으로 붙게되면서 부모로부터 상대적인 트랜스폼을 가지게 된다. 새롭게 추가한 컴포넌트의 이름을 FountainWater로 변경하고, 새로운 스태틱 메시의 트랜스폼 값을 앞서서 진행한 것처럼 Z값만 136으로 입력하면 그림과 같이 물이 나오는 분수대 액터가 완성된다.

[그림] 물 스태틱 메시의 설정 결과

다시 툴바에서 컴파일, 저장 버튼을 누른 후 레벨로 돌아가 지금 완성한 블루프린트를 드래그해 배치해본다. 앞서서 제작한 분수대는 액터를 2개 사용한 반면, 블루프린트를 통해 만든 분수대는 하나의 액터에서 일괄 관리할 수 있게 되었다.

[그림] 두 분수대의 비교


블루프린트 제작 시 주의할 점들

아래는 블루프린트 사용시 주의할 점들이다.
- 블루프린트를 처음 열 때에는 컴포넌트의 조립 결과를 시각적으로 확인할 수 있는 뷰포트 창이 열린다. 하지만 두 번째부터는 로직을 넣는 이벤트 창이 열린다. 추가적으로 컴포넌트를 조립하고 확인하고 싶으면 뷰포트 창으로 이동하면 된다.

[그림] 뷰포트 창과 이벤트 창

- 블루프린트를 생성한 후 더블 클릭해 에디터를 연 다음 아무것도 하지 않고 닫은 후, 다시 더블클릭하여 열면 아래 그림과 같이 기본 값만 보이는 간략 버젼으로 뜬다. 이 때 당황하지 말고 상단의 "풀 블루프린트 에디터 열기"를 클릭하면 원래대로 들어온다.

[그림] 풀 블루프린트 에디터 열기

- 가끔 블루프린트를 더블 클릭했는데, 아래와 같은 현상이 발생할 때가 있다. 당황하지 말고 창에서 '클래스 디폴트'를 선택한 후, 다시 '풀 블루프린트 에디터 열기'를 선택하면 된다.

[그림] 비어있는 블루프린트가 뜨는 경우


블루프린트 제작 마무리

다시 블루프린트로 돌아가 Point Light 컴포넌트 및 다른 Static Mesh 컴포넌트를 추가해 분수대를 더 꾸며보자. 아래 그림은 SM_Plains_Fern02 스태틱 메시와 SM_Plains_LargeRock_Pile01 스태틱 메시를 추가한 결과다.

[그림] 포인트 라이트 컴포넌트와 스태틱 메시를 추가한 결과 화면

컴파일, 저장 버튼을 누르고 레벨로 돌아가면 별도의 부가적인 작업 없이도 아래 그림과 같이 블루프린트로 드래그한 액터에 변경사항이 자동으로 업그레이드 된 것을 확인할 수 있다.

[그림] 업그레이드 된 분수대 액터의 최종 결과



참고자료의 출처: http://cafe.naver.com/unrealenginekr/13118

댓글 없음:

댓글 쓰기