환경
Tutorial
Beginner
+10XP
20 mins
202
Unity Technologies

이전 튜토리얼에서는 플레이어 캐릭터를 만들어 보았습니다. 이 캐릭터는 돌아다닐 수 있지만, 현재는 돌아다닐 장소가 없습니다. 이제 씬에 환경과 적절한 조명을 더하고 내비게이션 메시를 추가하여 적이 유령의 집을 배회할 수 있도록 해 보겠습니다.
Languages available:
1. 환경 추가
이전 튜토리얼에서는 플레이어 캐릭터를 만들어 보았습니다. 이 캐릭터는 돌아다닐 수 있지만, 현재는 돌아다닐 장소가 없습니다. 이제 씬에 환경과 적절한 조명을 더하고 내비게이션 메시를 추가하여 적이 유령의 집을 배회할 수 있도록 해 보겠습니다.
제작하는 게임의 유형에 따라 Unity에서 환경을 구축하는 과정이 다양하게 나뉩니다. 여기에는 일반적으로 여러 모델을 프로젝트 창에서 계층 창으로 드래그하여 인스턴스화하는 작업이 포함됩니다. 보통 환경은 씬에 물리적인 존재감이 필요하기 때문에 각 모델에 콜라이더가 추가됩니다. 이 모델은 프리팹인 경우가 많기 때문에 매번 새로운 콜라이더를 추가할 필요는 없습니다.
플레이어 캐릭터를 설정할 때 이미 경험한 바와 같이 게임 환경을 생성하는 작업은 매우 반복적인 노동입니다. 이번 튜토리얼에서는 반복 작업을 할 필요가 없도록 이미 게임 환경이 제작되어 있으며 이를 인스턴스화해서 사용하면 됩니다.
1. 프로젝트 창에서 Assets > Scenes 폴더로 이동하고 MainScene을 더블 클릭하여 로드합니다.
2. Assets > Prefabs로 이동하여 Level Prefab을 선택합니다.
3. Level 프리팹을 프로젝트 창에서 계층 창으로 드래그하여 인스턴스화합니다.
Level 프리팹은 벽, 바닥, 문, 가구, 장식 등 다양한 모델로 구성되어 있습니다. 계층 창에서 해당 계층 구조를 펼치면 이 모델의 조합 방식을 확인할 수 있습니다.
플레이어 캐릭터 위치 지정
씬에 환경을 생성했으니 캐릭터가 적절한 위치에서 시작할 수 있도록 JohnLemon의 위치를 지정해야 합니다.
1. 계층 창에서 JohnLemon 게임 오브젝트를 선택합니다.
2. 인스펙터에서 Transform 컴포넌트의 Position 프로퍼티를 (-9.8, 0, -3.2)로 설정합니다.
3. File > Save로 이동하여 씬에 대한 변경 사항을 저장합니다.
4. 플레이 모드로 들어가서 변경 사항을 확인합니다. 카메라가 올바른 위치에 있지는 않지만 JohnLemon이 탐색하고 탈출할 수 있는 레벨이 구축되었습니다.
환경 자체는 훌륭하지만 약간 평면적으로 보입니다. 다음 단계에서는 씬의 조명을 조정해 보겠습니다.
2. 환경 광원 설정
조명은 전체적인 분위기에 큰 영향을 줍니다. 게임이 진행될 으스스한 분위기를 만들기 위해 먼저 조명을 변경합니다.
Unity의 광원은 단순히 게임 오브젝트에 Light 컴포넌트를 추가한 것입니다. Light 컴포넌트에서는 광원의 컬러와 강도뿐만 아니라 광원의 '유형'을 변경할 수 있으며, 그림자와 라이트매핑을 위한 복잡한 컨트롤도 다양하게 포함되어 있습니다.
Unity의 새로운 씬에 기본값으로 생성되는 2개의 게임 오브젝트 중 하나는 방향 광원입니다. Level 프리팹으로 인해 이제 씬에 일련의 광원이 추가되었습니다.
방향 광원부터 자세히 살펴보겠습니다.
3. 씬의 방향 광원 변경
씬의 방향 광원은 Directional Type으로 설정되어 있습니다. Directional Type 광원은 태양과 같이 거리가 매우 먼 광원 오브젝트를 모방합니다. 씬에서 어느 위치에나 배치할 수 있으며 회전하여 광원이 씬에 영향을 주는 각도를 변경할 수 있습니다.

방향 광원을 조정하여 달빛처럼 보이게 하고 그림자를 만들어 보겠습니다.
1. 계층 창에서 Directional Light 게임 오브젝트를 선택합니다.
2. Color부터 시작하여 Light 컴포넌트의 프로퍼티를 일부 변경하겠습니다. 이를 위해서 먼저 컬러가 적용되는 원리를 이해해야 합니다.
인스펙터 창에서 Color 프로퍼티를 클릭합니다. Unity에서 임의의 Color 프로퍼티를 클릭하면 다음과 같이 컬러 피커 창이 열립니다.

3. 컬러 피커 창에는 컬러 값을 설정할 수 있는 다양한 옵션이 있습니다.
각 컬러는 다음의 4가지 채널로 구성됩니다.
- 빨간색
- 초록색
- 파란색
- 알파
컬러를 구성하는 각 채널의 양은 다양한 방식으로 표시됩니다. 컬러 링 바로 아래의 드롭다운 메뉴를 통해 표시 방식을 선택할 수 있습니다.
드롭다운 메뉴가 RGB 0-255로 설정되어 있는지 확인합니다. 이 표시 방식은 각 채널이 0에서 255 사이의 정수로 표시된다는 것을 의미합니다.

4. Light 컴포넌트의 Color 프로퍼티를 (225, 240, 250)으로 설정합니다. 이렇게 하면 노란색이 아닌 매우 옅은 색의 파란색 광원이 생성됩니다.
5. Light 컴포넌트에서 Intensity 프로퍼티를 2로 높입니다.
6. 이제 유령의 집에 있는 으스스한 그림자의 품질을 향상해 보겠습니다. Light 컴포넌트에서 Realtime Shadows 프로퍼티를 찾습니다. Resolution 프로퍼티를 Use Quality Settings에서 Very High Resolution으로 변경합니다.
7. Realtime Shadows Bias와 Normal Bias 프로퍼티를 0.01로 설정합니다.
8. Transform 컴포넌트에서 Rotation 프로퍼티를 (30, 20, 0)으로 설정합니다. 이렇게 하면 광원이 회전하고, 집의 창문을 통해 빛이 들어오게 됩니다.
9. 씬을 저장합니다.
씬에 오싹한 분위기가 조성되었습니다.
4. 전역 조명 라이트매핑 효과 생성
Unity에서는 직접 조명 및 간접 조명이라는 2가지 조명을 통해 실제 빛의 속성을 시뮬레이션합니다. 직접 조명은 태양(씬의 방향 광원)과 같은 특정 광원으로부터 옵니다. 간접 조명은 직접광이 표면에서 반사되어 발생하는 추가적인 조명입니다.

동일한 씬: 조명이 적용되지 않음(왼쪽 이미지), '직접광'만 적용(가운데 이미지), 간접 '전역 조명' 적용(오른쪽 이미지) 광원이 여러 표면 간에 반사되면서 컬러가 전달되어 훨씬 사실적으로 표현되는 것을 볼 수 있습니다.
이 효과는 Unity에서 주로 전역 조명 라이트매핑 기능을 통해 구현됩니다. 라이트매핑은 씬 내의 광원 반사를 시뮬레이션하여 프로젝트 내에 저장된 에셋에 작성(또는 '베이크')합니다. 이 작업에는 시간이 소요되지만 매우 사실적인 씬을 만들 수 있습니다.
시간을 단축하려면 다음과 같이 근사치를 사용하여 유사한 효과를 생성할 수 있습니다.
1. Window 메뉴로 이동하여 Rendering > Lighting Settings를 선택합니다. 이름 태그를 클릭하고 드래그하여 인스펙터 창 옆에 배치합니다.
Lighting Settings 창은 현재 로드된 씬의 Unity 전역 조명 기능을 제어하는 주요 지점으로 환경 조명, 반사, 안개 설정도 포함되어 있습니다.
2. Realtime Lighting 섹션에서 Realtime Global Illumination 체크박스의 선택을 해제합니다. Mixed Lighting 섹션에서 Baked Global Illumination 체크박스의 선택을 해제합니다.
3. Environment 섹션에서 Skybox Material 프로퍼티의 맨 오른쪽에 있는 원형 선택 버튼을 눌러 None(null 레퍼런스)으로 설정합니다. 이 게임에는 사실적인 하늘이 필요하지 않기 때문에 대체 조명을 사용하겠습니다.

4. Environment 섹션에서 Environment Lighting Source를 Gradient로 설정합니다.
그레디언트는 다음의 3가지 컬러 필드로 나누어집니다.
- Sky: 씬 위에서 내려오는 환경 광원을 제어합니다.
- Equator: 지평선에서 씬 중앙으로 이동하는 광원을 제어합니다.
- Ground: 씬 아래에서 올라오는 광원을 제어합니다.
그레디언트는 전체 씬을 감싸는 커다란 구체와도 같습니다.
5. Sky 컬러를 더 옅은 회색으로 설정합니다(170, 180, 200).
이렇게 하면 바닥과 침대, 테이블과 같은 오브젝트가 전체적으로 밝아집니다.
6. Equator 컬러를 청회색으로 설정합니다(90, 110, 130).
이렇게 하면 벽과 프랍이 밝아집니다.
7. Ground 컬러를 검정색으로 설정합니다(0, 0, 0).
Ground 컬러는 윗 방향으로 조명을 쏘아 올려 멋진 전역 조명식 효과를 구현할 수 있지만 유령의 집에 사용하기에는 너무 밝습니다.
8. 씬을 저장합니다.
게임의 기본적인 조명 구현을 완료하고 이를 통해 으스스한 분위기를 연출해 보았습니다. 다음으로 유령이 게임 환경을 돌아다닐 수 있도록 메시를 생성해 보겠습니다.
5. 내비게이션 메시 추가
유령의 집에서는 유령이 배회해야 합니다.
유령이 돌아다닐 수 있도록 하기 위해 내비메시(NavMesh, 내비게이션 메시)라는 빌트인 시스템을 이용할 수 있습니다. 두 번째 튜토리얼에서 메시는 여러 삼각형이 맞춰져 형태를 정의하는 것이라는 사실을 배웠습니다. 이러한 메시를 통해 JohnLemon을 화면에 렌더링할 수 있습니다. 내비메시는 보이지 않는 셰이프로, 선택한 게임 오브젝트가 이동할 수 있는 영역을 정의합니다.
그러면 이동할 수 있는 영역과 이동할 수 없는 영역을 어떻게 결정할까요?
게임 오브젝트 정적으로 표시
게임 오브젝트가 정적으로 지정되어 있으면 Unity의 내비게이션 시스템은 해당 게임 오브젝트가 이동하지 않을 것으로 추정합니다. 게임 환경은 많은 Mesh Renderer 컴포넌트가 포함된 여러 게임 오브젝트로 구성되어 있습니다. 게임 오브젝트가 정적으로 표시된 Mesh Renderer 컴포넌트의 모든 메시가 조합되어 내비메시의 기반이 됩니다.
환경 게임 오브젝트를 정적으로 표시하는 방법은 다음과 같습니다.
1. 계층 구조에서 Level 게임 오브젝트를 선택합니다.
2. 인스펙터에서 Static 체크박스를 선택합니다.
3. 모든 자식 오브젝트에도 정적 플래그를 활성화할 것인지 묻는 대화창이 나타납니다. Yes, change children을 선택합니다.
4. 이제 Level 게임 오브젝트와 모든 자식 게임 오브젝트가 정적으로 표시되었는데, 한 가지 예외를 설정해야 합니다. 레벨 디자인에는 그림자를 드리우는 데 사용되는 Ceiling Plane 게임 오브젝트가 있습니다. 이 게임 오브젝트를 베이크에 포함시키면 유령이 천장에서 걸어 다니게 됩니다. 공포감을 더해 줄 것 같긴 하지만 이 게임에서는 적용하지 않기로 합니다.
계층 창에서 Level 게임 오브젝트와 자식 오브젝트를 엽니다.
5. Level > Corridors > Dressing > Ceiling Plane으로 이동하여 Ceiling Pane 게임 오브젝트를 선택합니다.
6. 인스펙터에서 Static 체크박스를 선택 해제합니다.
7. File > Save로 이동하여 씬을 저장합니다.
지금은 Level 프리팹이 아닌 씬 내에서 변경 사항을 적용하여 프리팹 설정을 변경하지 않고 오버라이드하고 있습니다. 기본 템플릿을 약간 변경할 때 이런 방법을 사용합니다.
6. 내비메시 생성
내비 메시를 생성하는 과정을 베이킹이라고 합니다. 이 작업은 Navigation 창에서 수행합니다.
내비메시를 베이크하는 방법은 다음과 같습니다.
1. 메뉴 바에서 Window > AI > Navigation으로 이동하여 Navigation 창을 엽니다. 인스펙터 창 옆에 Navigation 창이 배치됩니다. 배치되지 않는 경우에는 인스펙터 창 옆으로 드래그하여 직접 배치합니다.
2. Navigation 창 상단에는 Agents, Areas, Bake, Object의 4가지 탭이 있습니다.
Bake 탭을 선택합니다.
3. 베이크 설정은 내비메시의 구성 방식을 세부적으로 조정합니다. 첫 번째 설정은 내비메시를 통과할 에이전트(배회하는 유령들)인 내비메시 에이전트를 정의합니다. 에이전트의 크기와 에이전트가 이동할 수 있는 터레인을 구체적으로 정의합니다.
여기서는 Agent Radius 값만 조정하여 유령의 집을 배회하는 유령에 기본값보다 작은 값을 설정합니다.
Agent Radius를 0.25로 변경합니다.
4. 창 하단에서 Bake 버튼을 선택합니다.
베이크 프로세스는 컴퓨터 성능에 따라 수 초 내지 수 분이 소요됩니다. 베이크가 완료되면 씬 창의 환경에 옅은 파란색 메시가 덮입니다. 이 영역에서만 유령이 돌아다닐 수 있습니다.
Navigation 창이 열려 있고 활성화된 상태에서만 내비 메시가 표시됩니다. 인스펙터 탭으로 이동하면 씬 뷰에서 메시가 사라집니다. 내비메시가 보이지 않아도 그대로 적용되니 걱정하지 않아도 됩니다.
5. 이제 변경 사항을 저장합니다.
7. 요약
본 튜토리얼에서는 JohnLemon이 탈출해야 하는 흥미로운 환경을 추가하고 적합한 조명을 적용해 보았습니다. 적이 돌아다닐 수 있도록 환경에 내비메시를 베이크하기도 했습니다.
게임이 점점 완성돼 가고 있습니다. 이제 카메라 이동을 추가하고 전체 씬의 외관을 더욱 향상시켜줄 포스트 프로세싱 효과를 추가해 보겠습니다.