본문 바로가기
C#/UNITY_FPS 3D 서바이벌게임

Chapter 1-3. 캐릭터, 지형 : 지형 제작

by w1z 2024. 3. 11.

Chapter 1. 캐릭터 움직이기 & 지형 제작

지형 제작

Hierarchy - Create - 3D Object - Terrain

이렇게 Terrain을 만들면 아주 큰 개활지가 생긴다. 이렇게 유니티에서는 직접 개발자가 지형을 제작할 수 있는 툴을 제공한다. Terrain은 피봇(중심점) 위치가 중심점이 아님 모서리 (0, 0, 0) 기준으로 찍혀 있는게 디폴트 상태다.

🙋‍♀️ Terrain 컴포넌트 소개

Terrain을 3D 오브젝트로 생성하면 자동으로 Terrain 컴포넌트가 붙게 된다.

두 번째 탭 - Paint Terrain

Raise or Loser Terrain

지형의 고도 높이고 낮추기

  • 브러쉬를 선택한 후 Terrain 오브젝트에 좌클릭하면 지형의 높이가 높아진다!
  • Shift를 누른채 좌클릭하면 처음 지형으로 돌아간다.
  • 낮게 하고 싶은 지형이 있다면 다른 지형들의 높이를 올려주면 된다.
  • Opacity로 강도를 조절할 수 있다.(천천히 올라간다.)

 

Paint Holes

지형 Terrain에 구멍을 낼 수 있다.

 

Set Height

Terrain의 높이를 제한하거나 설정한다. 👉 완만하고 평평한 높이를 구현하기에 적절하다.

  • 예륻 들어 Height 값을 10 으로 하면 아무리 brush로 지형의 고도를 높여도 10 까지만 높아진다.
    • 완만하고 평평한 고원같이 높이가 올라간 것을 볼 수 있다.
    • 즉, 높이가 최대 10으로 고정된다. 10을 넘을 수 없다.
  • Flatten All 을 누르면 전체 Terrain의 높이가 현재 설정되어 있는 Height 값으로 설정되며 전체적으로 평평해진다.
    • 즉, 예륻 들어 Height 값을 10 으로 되있다면 Terrain 오브젝트의 Y 위치 값이 10이 된다. 그리고 평평해진다.

 

Smooth Height

Terrain 지형을 부드럽고 매끄럽게 만든다. 뾰족뾰족한 부분을 스무스하게 만들어준다.

높낮이를 줄이기 보단 인근 영역과 비슷하게 맞추어 부드럽게 만들고 급겹한 변화가 덜 나타나게 한다.

 

Paint Texture

Terrain 에 풀, 눈, 모래 같은 텍스처를 그린다.

  • 텍스처 파일을 Tile로서 붙인다. 직접 텍스처를 Terrain에 그릴 수도 있다.
    • 텍스처는 포토샵이나 어피니티 포토 등, 기타 툴을 이용해서 2의 n승 사이즈의 PNG 파일로 쉽게 만들 수 있다.
  • 텍스처 추가하기
    • Create Layer 로 원하는 텍스처 PNG 파일로 텍스처 레이어를 추가할 수 있다.
  • Metalic 으로 광택 정도를 나타낼 수 있고 Smoothness 를 올려주면 빛이 강조가 된다. (전체적으로 빛이 고루게 퍼진다.)
  • O
  • Tiling Setting 로 텍스처가 반복되어 삽입될 Tile의 해상도를 설정할 수 있다.
    • Tile 의 해상도가 클 수록 텍스처가 확대되어 반복 될 것이고 해상도가 작을 수록 텍스처가 촘촘하게, 작게 반복될 것이다.
  • Opacity 값이 높을 수록 브러쉬로 칠하는 텍스처 레이어가 강한 강도로 그려지고, 낮을 수록 흐리게 그려진다.

돌 표면의 텍스처 파일로, 바위 표면을 나타낼 텍서츠 레이어를 추가로 만든 뒤, 텍스처를 Terrain 표면에 그려주었다.

텍스처 레이어는 📂Assets/Texture 에 저장된다. 생성했던 레이어를 Add Layer로 불러올 수 있다.

 

세 번째 탭 - Paint Trees

Terrain 위에 나무를 추가할 수 있다.

나무 오브젝트 만들기

Hierarchy - Create - 3D Object - Tree

Tree 오브젝트를 처음 생성하면 이렇게 생겼다!

  • Tree Seed
    • 나무의 키와 뻗는 방향 꺾인 방향 등등을 랜덤하게 지정하는 Seed.
  • Area Spread
    • 해당 나무의 영역. 나무들끼리 이 영역은 중첩되지 않는다. 이 영역이 좁을 수록 나무들끼리 서로 촘촘하게 있을 수 있다.
  • LOD Quaility
    • LOD 👉 Level of Detail 의 약자로, 시스템 부하를 줄이기 위해 만들어진 최적화 기술이다. 해당 오브젝트가 카메라와 거리가 멀어질 수록 디테일을 낮춘다.
  • Ambient Occlusion
    • 체크하면, 카메라에 해당 Tree 오브젝트가 안보일 때, 모든 기능을 꺼지게 만든다.
    • 나무가 카메라 화면에 안나올 땐, 바람에 흔들린다거나 하는 효과를 줄 필요가 없다.
    • 성능상 유리해지니 딱히 이유가 없으면 체크 상태로 두자.
  • AO Density
    • Ambient Occlusion을 정도를 설정. 카메라에 안보일 때 기능을 얼만큼 끌지.
  • Material
    • 나무 기둥의 Material.
    • 색깔, 명암, 질감 등등을 입힐 수 있다.

 

나뭇가지 추가하기

맨 밑의 아이콘은 이 하나의 Tree 오브젝트 전체를 선택하는 아이콘이다. 사진 상 중간에 있는 아이콘은 나무의 가운데 기둥인데 이를 클릭하고 나뭇가지를 추가하니 이 기둥을 부모로 하는 나뭇가지가 위와 같이 추가되었다. 진짜 알고리즘에서 배우는 Tree 자료구조와 같다!

  • 원하는 나뭇 가지 노드를 클릭한 후
    • Frequency
      • 해당 나뭇 가지의 개수
      • 두번재 나뭇가지 노드의 Frequency를 10 으로 설정해서 10 개의 나뭇가지가 생겨났다.
    • Seek Sun
      • 해당 나뭇 가지 모양을 하늘로 치솟게 한다.
        • 정도를 높게할수록 수직에 가까워진다.
    • Length
      • 나뭇 가지의 길이

 

잎 추가하기

  • 마찬가지로 Frequency로 잎의 부모가 되는 나뭇가지의 노드로부터 피어난 잎의 개수를 조절할 수 있다.
  • Geometry Mode 에서 잎의 모양을 지정할 수 있다.
    • Plane - 평평한 모양
    • Cross - 십자가 모양
    • Mesh - 원하는 Mesh 잎 모양을 할당할 수 있다.
  • size 에서 잎의 사이즈를 조정할 수 있다.
    • 사진과 같이 구간을 지정해두면 해당 구간 내에서 랜덤한 사이즈 값을 가지게 된다.

 

프리팹화 하기

그냥 오브젝트를 📂Assets 폴더에 드래그 앤 드롭하면 된다.

  • 이제 찍어낼 수 있는 나무 프리팹이 생성되었다.
  • 이제 이 생성한 나무 프리팹을 Terrain의 Paint Trees 에 가져와보자.

 

Terrain에 나무 그리기

위와 같이 Edit Trees 를 클릭하여 만들어둔 나무 프리팹을 추가한다.

브러쉬로 Terrain 위에 프리팹으로 할당한 나무를 이렇게 그릴 수 있다! density로 밀도를 높이면 브러쉬질 할 때마다 나무가 더 많이 추가된다. Tree Height의 범위를 조절해주면 맵 크기에 맞게 배치할 수 있다.

 

네 번째 탭 - Paint Details

풀이나 흙 같은 Terrain 의 디테일한 부분을 설정할 수 있다.

  • 풀 텍스처 추가하기
    • Edit Details - Add Grass Texture

풀의 텍스처 PNG 이미지를 할당하면 해당 이미지로 풀 텍스처를 표현할 수 있다. 풀 하나 하나의 최대 최소 크기도 지정할 수 있다.

이미 그려진 풀은 Shift 누르고 그리면 다시 지울 수 있다.

 

다섯 번째 탭 - Terrain Settings

  • ⚙️ Terrain Setings 기능 예시
    • Terrain의 해상도 크기 조절
      • 현재 Terrain Width와 Length를 100, 100으로 해둠
    • 바람의 세기
    • 바람에 의한 풀의 세기
    • 거리에 따른 디테일 표현
    • 그림자

만들어 본 맵에 플레이어를 배치 시켜 보았다. 😀