게임 엔진/Unity

Unity 10일차 - 3D게임-1(3D 오브젝트, 터레인(Terrain))

FakeZero 2022. 2. 6. 17:58

  9일차까지는 2D, 2개의 차원만 다뤘지만 3D부터는 3개의 차원을 다루게 됩니다. 그런만큼 고려해야하는 요소가 더 많아졌지만 반대로 말하면 게임 엔진에서 그런 요소들을 최대한 줄이고 간편하게 또 정확하게 다루기 위한 기능들이 많아졌다는 말이기도 합니다.

 

  오늘부터 시작하는 3D게임 강좌는 유니티의 모든 것을 보여드릴 수는 없지만 알고 있으면 분명 도움이 될 것들을 보여드리도록 하겠습니다.


1. 계획하기

  이번에 만들것은 마우스를 클릭해 밤송이를 발사하여 과녁을 맞추는 게임입니다.

 

  1. 만들 게임: 과녁 맞추기 게임

  2. 필요한 리소스: 밤송이, 과녁, 배경이 될 나무와 지면

  3. 게임이 구동될 플랫폼: PC

  4. 필요한 기능: 클릭하면 밤송이를 발사하고 과녁에 맞으면 이펙트가 나오는 기능


2. 리소스 준비하기

chapter7.zip
0.04MB

  (본 파일은 <유니티 교과서>의 출판사, [길벗]에서 제공한 것임을 밝히며 2차 수정 및 배포를 금지합니다.)


3. 프로젝트 생성 및 사전 설정

  이번에 프로젝트를 만들 때에는 2D가 아닌 3D를 골라야 한다는 점을 명심하세요.

  이번엔 설명할 것이 조금 있어서 씬을 먼저 저장하도록 합시다. 도구바의 File -> Save As를 이용해 에셋 창에 GameScene이라는 씬을 만들어 주었습니다.

  Hierarchy 탭에 2D 프로젝트에선 보이지 않던 것이 보입니다. Directional Light입니다. 3D의 세계에선 빛이 없으면 오브젝트가 잘 보이지 않습니다. Directional Light는 자신이 원하는 방향으로 빛을 비출 수 있는 조명 오브젝트 입니다. 참고로 조명 오브젝트에는 여러 종류가 있으니 시간이 있으면 한 번씩 다뤄보는 것도 좋습니다.

 

  이제 리소스를 불러와 봅시다.

  'fbx'라는 확장자명을 가진 파일을 불러왔습니다. fbx는 지금 볼 수 있듯이 3D 파일의 가장 기본적인 확장자명입니다. fbx 이외에도 'obj'나 MMD(Miku Miku Dance) 모델을 불러오는 'pmx'파일 등이 3D파일의 확장자명이 됩니다.


4. 3D 씬(Scene)

  3D 오브젝트를 배치해보기 전에 3D Scene창에 익숙해져 봅시다.

 

  마우스 휠을 누른 상태로 화면을 움직인다거나 마우스 휠을 굴려서 확대하거나 축소하는 것은 2D 화면과 똑같습니다. 여기서부터가 3D의 추가된 점입니다.

 

  3D 씬 창에서는 마우스 우클릭을 한 상태로 움직이면 상하좌우를 둘러 볼 수 있고 흔히 게임할 때 방향키로 쓰이는 키보드의 W, A, S, D를 이용하면 직접 이동하며 돌아다닐 수도 있습니다. Shift를 눌러 더 빠르게 돌아다닐 수도 있습니다.

  돌아다니는 속도가 너무 빠르다고 생각되면 Camera Speed를 조절하면 속도를 조절할 수 있습니다. 밑의 Min, Max 값을 이용하면 속도의 범위와 크기를 더 늘릴 수도 있다.

 

  자유롭게 돌아다닐 수 있는건 좋지만 잘못하면 방향을 잃을 수 있습니다.

  그 때를 위해 이것이 존재합니다. 아마 시점을 움직이기 시작했을 때, Scene 탭의 오른쪽 위에 이런 것이 나타났을 것입니다. 이것은 씬 기즈모라고 합니다. 현재 내가 어떤 좌표축을 기준으로 움직이고 있는 지 명확하게 보여주는 역할을 합니다. 원뿔 같은 것을 클릭하면 정확하게 저 원뿔들이 가리키고 있는 방향으로 시점을 옮길 수 있는 기능도 있습니다.


5. 터레인(Terrain)

  3D 오브젝트를 다루기 전에 3D 오브젝트의 구조에 대해서 알아봅시다.

 

  3D 오브젝트를 구성하는 것은 크게 총 3가지라고 할 수 있습니다.

 

  1. 3D 오브젝트의 본체를 담당하는 3D 모델 파일(fbx, obj 등의 확장자를 가지고 있음)

  2. 2D 이미지(보통 png 확장자인 파일)인 텍스쳐(Texture)를 기반으로 3D 모델의 색과 질감을 결정하는 머테리얼(Material) 파일(mat 확장자 파일)

  3. 머테리얼의 빛 반사 방식이나 색감, 질감 등에 여러 효과를 줄 수 있는 쉐이더(Shader) 파일(Shader 확장자)

 

  이 세 요소가 모두 필요하기 때문에 만약 3D 모델을 만들때 설정하지 않았더라도 게임 엔진에서는 자동으로 흰색의 기본 머테리얼(쉐이더가 포함된)을 생성해 3D 모델에 적용하게 됩니다.

 

  지금 다룰 오브젝트는 터레인(Terrain)이라고 합니다. 이 오브젝트는 지형을 생성하는데 특화된 오브젝트여서 평범한 오브젝트하고는 조금 다릅니다.

  Hierarchy 창에 우클릭을 하고 3D Object -> Terrain을 클릭하는 것으로 터레인 오브젝트를 생성할 수 있습니다.

  터레인 오브젝트를 만들면 이렇게 광할한 대지가 나타나게 됩니다. 터레인 오브젝트를 -500, 0, -500의 위치로 이동시켜 줍시다.

 

  이제 지형을 그려볼 껍니다.

  Terrain 컴포넌트의 붓 그림을 클릭하고 터레인 오브젝트에 마우스를 가져다 대면 푸른색의 원 같은 것이 나타납니다.

  아까 같은 상태에서 왼클릭을 하며 마우스를 움직이면 이런식으로 지형이 생겨납니다. Shift를 누르며 왼클릭을 하면 지형이 원래대로 내려가기도 합니다. 지형을 움직일 수 있는 타이쿤 게임을 해보신적이 있다면 쉽게 다룰 수 있을 것입니다.

  지금은 Raise or Lower Terrain으로 설정 되어 있지만 이것 외에도 다양한 기능이 있습니다. 만들어진 지형을 다듬는 도구나 터레인에 구멍을 뚫어 지형이 생기는 것을 막는 등의 기능이 있습니다. 또한 밑의 Brushes(브러시 종류), Brush Size(브러시 굵기), Opacity(브러시 효과의 강도)를 조정하므로써 더욱 변화를 줄 수 있습니다.

  컴포넌트를 위와 같이 설정한 후 적당히 +Z방향에 산을 만들어 줍시다.

  씬 기즈모의 방향에 주의하며 +Z 방향에 산을 만들어 주었습니다.

  게임을 실행시키면 다음과 같은 모습이 잡힙니다. 하지만 이 상태로라면 단순히 흰 산일 뿐입니다. 여기서 필요한 것이 3D 오브젝트의 2,3번째 요소인 머테리얼과 쉐이더입니다.

 

  머테리얼을 만들기 위해서는 텍스쳐라는 것이 필요하다고 했습니다. 하지만 보통 텍스쳐라 함은

  이런식으로 되어있는 것으로 지금 당장 저희가 만들 수는 없습니다. 그렇기 때문에 저희는 만들어져 있는 머테리얼을 쓰도록 하겠습니다.

  Package Manager를 이용해 Unity의 에셋 스토어에서 다운 받은 에셋을 사용할 수 있습니다.

  네 계정으로 로그인 했을 때 이렇게 나타납니다. 저는 몇가지 에셋을 이미 받았기 때문에 다운 받은 에셋이 나타나서 현재 진행중인 프로젝트에 불러올 수 있게 되어 있습니다.

 

  지금부터 유니티에서 제공하는 머테리얼 에셋들을 받으러 가봅시다.

https://assetstore.unity.com/

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

  에셋 스토어에는 Unity가 무료로 제공하는 에셋 패키지 이외에도 다른 사람들이 만든 에셋들을 팔고 있습니다.

  에셋 스토어에서 이 에셋을 찾아서 내 에셋에 추가하도록 합시다.

  다시 패키지 매니저로 돌아와서 새로고침을 한 다음 방금 받은 에셋을 다운로드하고 임포트(import)하도록 합시다.

  import를 누르게 되면 위와 같은 화면이 나옵니다. 우리가 필요한 것은 나무 3D 모델과 풀과 바위의 텍스쳐 입니다. 위의 사진에 체크 되어있는것만 체크해서 임포트하도록 합시다.

  위와 같은 폴더가 생겼다면 성공입니다. 이제 만들어진 지형에 풀칠을 해주도록 합시다.

  Terrain 컴포넌트의 브러시 설정을 Paint Texture로 바꿔주고 Edit Terrain Layers를 눌러서 새로운 레이어를 만들어줍시다. 쓸 텍스쳐는 GrassHillAlbedo 텍스쳐 입니다.

  제대로 적용 되면 위와 같이 됩니다. 여기서 조금만 더 효과를 줍시다. 다시 한 번 Edit Terrain Layers를 누르고 Create Layers를 눌러서 새로운 레이어를 추가해 줍니다.

  이번에 쓸 텍스쳐는 GrassRockyAlbedo 텍스쳐입니다. 브러시를 위와 같이 설정 한 다음 새로 만든 레이어를 왼클릭으로 선택해 줍시다.

  이제 산의 정상과 그 부근에 살짝 터치만 해줍시다. 너무 진하게 칠하면 오히려 부자연스럽습니다. 지금 이 상태에서 게임을 실행하면 바닥의 텍스쳐가 대놓고 보일 껍니다.

  카메라의 위치를 0, 5, -10으로 변경해줍시다.

카메라의 y좌표가 1일때
카메라의 y좌표가 5일때

  지면의 텍스쳐가 좀 더 자연스러워 보이는 효과가 생겼습니다.

 

  이것만으로는 맵이 너무 횡합니다. 아까 임포트 할 때 나무 모델도 불러왔습니다. 이제 땅에 나무를 심어 봅시다.

  Broadleaf_Desktop 프리팹을 골라서 바닥에 심어 봅시다. 참고로 Pain Trees의 설정들의 의미는 다음과 같습니다.

설정 항목 설명
Brush Size 브러시 굵기
Tree Density 나무 밀도
Tree Height 나무 높이
Lock Width to Height 너비와 높이 비율을 고정한다
Random Tree Rotation 무작위로 나무를 회전한다.

  위와 같이 산기슭에 나무를 심어주도록 합시다.

  그럭저럭 볼만한 배경이 만들어졌습니다.


  오늘은 배경 만들기에 집중을 했습니다. 다음 시간엔 게임에 관련된 부분을 직접 만들어 봅시다.

 

  긴 강좌 읽고 따라하시느라 수고하셨습니다.