2. 게임 스테이지 제작

MOON·2022년 7월 14일
0

유니티_3D_SpaceShooter

목록 보기
2/11
post-thumbnail

빈 게임 오브젝트 (Empty Game Object)

3D 모델을 씬에 배치하는 방법 (2가지)

1) 해당 3D모델을 그대로 가져와서 직접 드래그앤 드롭
2) 빈 게임 오브젝트를 사용하여 자식 노드로 추가하는 방식

1. (Ex : Directional Light, Main Camera, …)
2. Transform Position -> (0, 0, 0) : 중요!

바닥 Floor 제작

메뉴 - GameObject - 3D Object - Plane 선택
Transform의 Scale 속성을 (5, 5, 5) 로 변경한다.

기본 Plane 은 10 유닛으로 구성됨
1 유닛 (유니티에서의 단위) = 1m
10 유닛 = 10m -> 5배 : 50m

개체의 Position 속성 재 설정

씬 뷰에 게임 오브젝트를 생성하고 나면 맨 먼저 Transform 컴포넌트의 position 속성값이 (0, 0, 0)으로 설정되어 있는가를 확인 한 후 적절한 위치로 옮겨 배치하는 습관을 들이도록 하자

특히, 게임의 Floor는 Y축 좌표를 항상 0으로 설정하고작업하는 것이 좌표를 계산하는 데 유리하다. 즉, 어떤 객체의 Y좌표가 0보다 크다면 객체가 바닥을 기준으로 위에 있다는 것을 알 수 있다.


객체의 Position 자동 (0, 0, 0) 셋팅 방법

객체의 Position값을 항상 월드 좌표의 원점(0, 0, 0)으로 설정하는 옵션
Edit - Preferences - Scene View -Create Objects at Origin 옵션을 체크함

텍스쳐

텍스쳐란 3D 모델의 표면에 매핑시킬 이미지 파일을 저장한다.

PSD, PNG, JPEC, TIFF, GIF, BMP, TGA, PSD 등 다양한 포맷을 지원
2n(16x16, 32x32, 64x64,...) 형태일때 속도가 가장 빠름
Project 뷰에서 “04.Images/Metal textures pack/pattern 10/diffus”를 선택하면 Inspector뷰에서 텍스쳐의 세부 정보를 확인 가능함
해상도를 바꾼 후 Apply 버튼 적용


머터리얼(1)

3D 모델과 텍스쳐 사이에는 반드시 머터리얼 매개체가 필요함.
3D 모델에 직접적으로 텍스쳐를 적용하는 것이 아니라 머터리얼에 텍스쳐를 적용 한후 그 머터리얼을 3D 모델에 적용하는 방식으로 해야 함
머터리얼은 3D 모델에 적용할 텍스쳐의 다양한 속성을 설정하는 역활을 함.
ex) “어떤 텍스쳐를 어떤 간격으로 반복하고, 표면의 재질은 어떻게 표현 하느냐"등을 설정

텍스쳐에 적용하는 방법
04.Images 폴더 하위폴더로 Materials 폴더를 하나 만들고
Project 뷰에서 Create - Material를 클릭
Material 이름 변경


머터리얼(2)

Floor 머터리얼에 텍스쳐 이미지를 지정
diffuse -> Albedo에 적용
normal -> Normal Map에 적용

텍스쳐 슬롯에 연결된 텍스쳐 확대 기능 (조그만 원 모양 클릭)
Ctrl + 마우스 왼쪽 버튼

머터리얼(3)

머터리얼을 3D 모델 (Quad)에 적용
Floor머터리얼을 Quad에 드래그앤드롭하여 적용한다.

타일링 속성 : 텍스쳐 반복
Floor 머터리얼의 Timing속성의 X, Y값을 (10, 10)으로 설정함

Mesh Filter / Mesh Renderer / Mesh Collider

애니메이션이 적용되지 않는 3D 모델은 Mesh Filter / Mesh Renderer 컴포넌트가 있다.
Mesh Filter : 3차원 형상 데이터 (메시 데이터)
Mesh Renderer : Mesh Filter를 화면에 렌더링 해주는 컴포넌트
~ Renderer 계열의 컴포넌트는 반드시 Material 속성이 있다. (텍스처 정보를 가진 머터리얼을 연결하는 속성이 있다)
Mesh Collider : Mesh형태의 콜리이더 - 상세한 충돌처리할 때 사용. 오버헤드가 심함


쉐이더 및 물리기반 셰이딩(1)

쉐이더(Shader)

1.머터리얼에 적용한 텍스쳐를 렌더링 할 때 표면의 재질감을 표현하는 방식
2.셰이더 프로그래밍은 DirectX, OpenGL에 따라 서로 다른 언어로 구현 (HLSL / GLSL)
3.Low 수준의 셰이더 프로그래밍 : 그래픽스 이론을 깊이 알고 있어야 함

(1) 4가지 렌더링 모드 지원

(2) 알베도
빛을 반사하는 정도(반사율) : 현실세계에 있는 모든 물체는 각각 다른 빛 반사율을 갖고 있음
일반적으로 가장 기본이 되는 텍스처를 연결하는 속성

(3) 메틸릭 속성
메탈릭은 객체 표면에 금속의 재질을 표현하기 위한 텍스쳐임(1에 가까울 수록 금속 재질에 가까워짐)

(4) 노멀 맵
표면의 굴곡을 표현하기 위한 텍스쳐의 일종으로 3D모델링으로 많은 폴리곤(Polygon)을 소모하지 않고 같은 효과를 낼 수 있다.
노멀 맵 텍스쳐 슬롯 오른쪽에 있는 속성 값이 커질 수록 거친 음영 효과를 낸다

(5) 하이트 맵 (Height Map)
텍스쳐로 높낮이를 표현하는 것으로 보통 지형(Terrain)을 표시할 때 사용됨

(6) 오클루전
흑백의 텍스쳐로 간접조명에 의해 생기는 명암을 더욱 뚜렷이 표시해 사물의 입체감과 깊이감을 살리는데 사용됨

(7) 이미션
스스로 빛을 방출하는 속성을 말함

(8) 디테일 마스크
Secondary Maps에 적용할 마스크를 설정하는 텍스쳐 슬롯임. 특정 부분만 좀 더 세부적인 텍스쳐를 표현 할 때 사용됨



물리기반 쉐이딩 적용해 보기

3D Sphere를 하나 생성한다.
“04.Images/YujghuesFreeMetalMaterials/Materials/M_YFMM_12” 적용
glow이미지는 Emission에 적용해 본다.
Directional Light의 속성을 끈다.
Emission의 HDR를 클릭하여 물체의 색상 패턴을 변경해 본다.


바닥의 굴곡 표현 방법
Project 뷰에서 Floor 머터리얼을 선택 한 후 “04.Images/Metal textures pack/pattern 10/normal”이미지를 연결
이전의 모습과 비교하여 굴곡이 생긴 것을 확인할 수 있음

프리팹

자주 사용하는 객체를 미리 만들어 놓고 재 사용할 수 있음
매번 똑같은 객체를 생성하고 재질을 설정하는 반복되는 작업을 줄임 - 한번 만들어진 셋팅된 객체를 반복적으로 사용할 수 있음
셋팅된 객체를 프리팹으로 등록하여 사용 가능
프리팹을 복제해서 만든 복사본의 속성은 원본의 속성과 일치하며, 만약 원본의 프리팹을 수정하면 모든 복사본들도 영향을 받아 일괄적으로 수정 됨
동적으로 프리펩 객체를 생성 및 삭제가 가능 - Instantiate() / Destroy()
유니티 활용에 있어서 매우 중요한 개념중의 하나임


프리팹을 이용한 벽 만들기(1)

GameObject ->3D Object-> Cube를 선택, 이름을 “Wall” 로 변경
Scale을 50, 4 ,1 로 맞춘다.

04.Images/Materials” 새로운 머터리얼을 생성하고 이름을 “Wall” 로 지정
“04.Images/YughuesFreeMetalMaterials/Materials/M_YFMM_08” 를 적용한다.
Texture의 Tiling 속성 X, Y(10, 1)로 설정한다


프리팹을 이용한 벽 만들기(2)

Wall의 Shader 속성 바꾸기
Standard 쉐이더는 고품질을 내는 쉐이더이기 때문에 모바일 환경에서는 무겁다. 좀 더 가벼운 쉐이더로 변경해야 한다
M_YFMM_08 - Shader - Mobile - Bumped Diffuse 로 선택
만들어진 Wall를 프리팹으로 만든다.

프리팹으로 만들어진 벽을 복사해서 Floor위에 4개의 벽을 배치하도록 한다.


프리팹의 복사본 이름 바꾸는 방법

Edit - Project Settings - Editor - Numbering Scheme - Game Object Naming 에서 바꿀 수 있다.




조명

Directional Light
Point Light
Spot Light
Area Light

위에 4종류가 있다. 자세한 내용은 다른 글에서 다루겠다.

하늘 표현 방식(1)

게임에서 하늘을 표현하는 방식 Skybox 와 SkyDome이 있다.
수업에서는 6방체 스카이 박스 (6 sided skybox)를 활용함
새로운 머터리얼 생성 : Skybox
Skybox 머터리얼 Shader 콤보박스 - Skybox - 6 Sided

하늘 표현 방식(2)

설치된 애셋 : Skybox Volume 2 에서 DeepSpaceBule 폴더에 있는 6개의 이미지를 각각 Skybox 머터리얼에 적용한다.
Front / Back / Left / Right / Up / Down 에 맞는 이미지를 배치한다.

하늘 표현 방식(3)

만들어진 스카이박스 재질을 실제 적용한다.
Window - Rendering - Lighting
Environment 탭에서 Skybox Material 을 선택하고 만들어 놓은 Skybox 재질을 드래그 앤 드롭


하늘 표현 방식(4)

새로운 머터리얼 생성 : SkyboxPC
Shader속성을 Skybox - Procedural 로 수정
프로시저럴 스카이박스의 여러 속성을 조절해서 하늘을 완성 한 후 라이팅 뷰의 Sun Material에 연결하거나 씬 뷰에 직접 드래그 해서 하늘을 변경

색깔이나 위치등 본인이 원하는 하늘을 만들면된다.

이것으로 게임 스테이지을 마무리 하였다.

profile
나만의 공간

0개의 댓글