본문 바로가기

유니티 개발 정보/강좌

유니티로 레벨 만들기 – Part 2 of 3

원문은 이곳에서 보실수 있습니다.



안녕!, 나는 Paladin 스튜디오의 
Matthias라고 한다. 


이번은 어떻게 The Fork Of Truth의 킥스타터 데모에 나오는 레벨을 어떻게 만들었는지에 대한 두번째 연재 글이다. 다른 포스트도 여기에서 찾아볼 수 있다.


  • 파트 1 - 유니티에서 지형을 생성하는 방법
  • 파트 3 - 레벨 전체를 하나로 만드는 더 작고, 부수적인 트릭 

이번 글에서는, 환경 객체에 대해서 다뤄 볼 것이고, 이들이 어떻게 설정되는지를 배우게 될 것이다.                                                                                                                                                                                  


기본 설정

레벨 디자인을 할 때, 두 가지 방법이 있다. 하나는 "레고" 같은 모듈 타일 기반 시스템이고, 다른 하나는 모든 것을 손으로 직접 만드는 방법이다.

이전 Momonga – Pinball Adventures나 Nikko RC Racer같은 게임에서는 후자인, 손수 직접 만드는 방법을 사용하였다. 이는 레벨 디자인에 있어서 많은 자유를 주겠지만, 게임의 범위를 제한하는데 더 많은 시간이 걸린다. 또 레벨 제작에 융통성이 없어지고, 반복과 실험적인 부분을 할 수 없는 시간-집중적인 프로세스가 되어 버린다.


타일 기반 시스템은 다르게 작동한다. 모든 애셋을 손수 만드는 대신에, 우리는 함께 스냅(snap)할 수 있는 빌딩 블록 셋트를 만들었다. 작은 블록들로 우리는 약간의 변형들을 만들 수 있다. 

아마 타일 기반 시스템의 가장 큰 장점은 빠르게 테스트하고 재가공 가능하다는 것이다. 전체의 씬을 설정하거나 변경하는 것 쉽고 빠르며, 당신이 빠르게 레벨의 변형들을 테스트할 수 있게 해준다.


타일

게임의 등장하는 모든 것(빌딩, 상자, 펜스 등)은 "객체"이다. 각각은 더 큰 게임에 적합하도록 만들어 졌으며, 특별히 타일에 맞춰 크기가 결정된다. 왜냐하면 모든 객체는 이 같은 방법으로 크기가 결정되는데, 그들 또한 게임 내에 다른 객체들에 맞춰 크기가 조절되기 때문이다.


객체는 기본적으로 오토데스크 3DS Max에서 3D 모델이다. 모든 객체는 자신의 파일에 존재하는데, 이 파일은 그 객체의 모든 것을 포함하고 있다. 객체는 다음과 같이 보일 것이다:



이 프로토-감시탑은 레벨의 몇몇 순간에 나타난다. 그리고 울타리, 상자, 드럼통과 같은 객체들과 함께 구현될 수 있다.

객체의 피벗 포인트가 바닥에 있다는 점을 명심해라. 이는 땅 위에 모든 객체를 손쉽게 위치시킬 수 있는 방법이다.

우리는 유니티에서 "model"이라는 폴더에 이 객체를 저장했다. 이는 자동적으로 유니티에 임포트 되는데, 게임 내에서 사용할 수 있게 준비가 된다.

프로토-타워는 최종적인 버전이 아니고, 간단한 스케치 버전이다. 아티스트는 일반적인 형태의 사이즈와 모양으로 만들었지만, 우리는 여전히 최종적인 3D 모델을 만들어야 한다. 우리는 유니티에서 3D 모델을 프리팹으로 바꿈으로써, 이 모형으로 레벨을 채울 수 있다. 이 "프리팹된 객체"들은 레벨 구조를 조립하기 위해 사용되는 빌딩 블록이 될 것이다. 우리는 Merlin’s Prefab Lab애셋을 이용해서 프리팹의 생성을 자동화 했다.  Merlin’s Prefab Lab는 자동적으로 유니티 안에 있는 모든 3D 모델에 대해 프리팹을 만든다. 당신이 3D 모델 소스를 변경할 때, Prefab Lab은 의존성을 추적하여 현재 사용중인 프리팹의 내부를 업데이트 할 것이다. 프리팹이 최신으로 유지 될 때, 마찬가지로 씬에있는 모든 객체는 업데이트는 될 것이다.


명명 규칙

모든 팀원들은 객체에 접근할 수 있고, 수정할 수 있으며, 만들 수도 있다. 거대한 라이브러리에서 이들을 찾는데 혼란이 없게하기 위해서, 각 객체를 명확하게 명명하는 것이 필요하다.

객체를 명명하는 방법은 여러가지가 있다. 그러나 우리는 프로젝트 폴더에서 객체를 찾는 구조화된 방법을 찾고 있다. 당신이 무슨 규칙을 선택하든, 항상 그 규칙을 따라라.

우리는 다음 규칙을 사용한다.

“Tree Broad Leaved 01 3×3 Green”

이 규칙은 "식별자(Tree) - 수식어(Broad Leaved) - 변형(01) - 차지하는 크기(3x3) - 시각적 정보(Green)으로 대문자와 단어 사이의 빈 공간으로 구분이 된다.

처음에는 "Tree", "Rock", "House" 같은 것들로 시작하여, 뒤이어 주된 수식어("이것이 Large한지, 아니면 Small한지)가 따라나온다. 그리고 숫자가 나오는데, 같은 종류의 변형을 나타낸다.(예를 들어, "Rock Large"의 다른 2종류를 나타낼 수 있다) 다음에는 타일에서 객체가 얼마나 큰지를 나타냄으로, 씬에 배치하지 않고도 크기를 바로 알 수 있다.이 같은 명명 규칙은 모든 관련 객체들을 자연스럽게 묶어주며, 그래서 우리는 객체 라이브러리를 손쉽게 왔다 갔다 할 수 있다.


객체 배치하기

씬에 객체를 배치하기 위해서, 프로젝트 폴더에있는데 프리팹을 씬에 드래그&드랍을 해야 한다.


이것이 전부다. 다른 아이템들로 반복하다보면, 어느 순간 레벨을 빠르게 채울 것이다. 그리고 자신이 원할 때까지 간단히 객체의 위치와 회전값을 변경하면된다.




객체를 스내핑하기

객체를 줄지어 배치시키는 것 역시 꽤 유용하다. 모든 객체는 "격자무늬(Grid)"에 적합하도록 만들어 졌기때문에, 이들은 함께 스냅될 수 있다. 우리는 이 같은 방법으로 금방 농장(혹은 별자리)을 만들 수 있다.


객체를 움직일 때, 컨트롤(Ctrl)키를 누르고 있으면,  해당 객체를  격자무늬에 스냅할 것이다. 스내핑 거리는 Snap Settings(Edit -> Snap Settings)에서 조절할 수 있다.
(역자 주: snap에 맞는 적당한 단어를 찾지 못하여 snap이라는 용어를 그대로 사용하였습니다. 쉽게 말해서 일정 간격으로 빠르게 물체를 움직(배치)이는 것이라고 생각하시면 됩니다.)

이는 특히 펜스를 만드는데 유용하다. 그들을 함께 스냅핑함으로써, 우리는 몇 초만에 긴 펜스를 만들 수 있다:



객체를 나란히 정렬하는 또 다른 방법은, 객체를 움직일 때 V를 누르고 있는 것이다. 이는 선택한 현재 객체를 씬에 있는 특정 모서리에 스냅할 수 있게 한다.

객체를 복사하면서, 객체를 약간 회전할 수도 있다. 각 펜스를 약간 회전함으로써, 우리는 훌륭한 둥근 울타리 지역을 만들었다:



결론

타일 기반 시스템을 사용하는 것은 레벨 디자인을 빠르고, 손쉽게 할 수 있게 도와준다.

  • "레고"를 생각해라, 그리고 객체에 적합한 사이즈를 결정하라.
  • 손쉬운 접근을 위해 일관되게 객체의 이름을 지어라.
  • 씬에 있는 객체를 빠르게 업데이트 시키기 위해서 프리팹을 사용하라.
  • 빠르게 객체 배열을 만들기위해 "스냅"기능을 사용하라.
최종적인 게임을 위해, 우리는 최소 12개의 훨씬 크고, 컨텐츠로 가득찬 레벨을 만들 것이다. 이들은 타일 기반 시스템으로 제작될 것이고, 이는 효율적인 작업을 위해 필수이다.


다음 시간: 이번 연재의 마지막으로, 우리는 라이트나 사운드같이 레벨에 붙어 있는 작은 모든 것을을 다룰 것이다.