포스트 프로세싱

플레이어가 보는 전체 게임 화면에 전체 효과를 제공한다.

Post Processing Volume

포스트 프로세싱이 월드 어디에서 효과가 나타나는지와 관련있다.

- Global을 선택하면 게임 전체와 씬의 모든 구역에 적용된다.

Post Processing Layer

- 옵션으로 안티앨리어싱 설정이 가능하다.

- 포스트 프로세싱을 트리거하는 카메라를 지정하고 카메라를 포스트 프로세싱 프로필과 연결하는 역할을 한다.

Post Processing Profile

- 특정 효과가 있다.

 

포스트 프로세싱 적용하기

Pakage Manager - Unity Registry - Post processing

Post Processing

빈 오브젝트에 Post-Process Volume을 추가하고 Is Global을 켜줬다.

이후에 효과인 Profile을 추가하면 되는데 Post-Process Volume 컴포넌트 Profile의 New 버튼을 눌러 생성하거나

프로젝트 창에 우클릭 Create - Post-Process Profile으로 생성할 수도 있다.

Post Processing 추가

Post Processing 볼륨의 레이어는 포스트 프로세싱 게임 개체가 어떤 레이어를 참조하고 봐야하는 지 알 수 있도록 Layer를 추가해 적용해주어야 한다. - Add Layer 하기

레이어 추가하기

이후에 우리가 볼 카메라에 Post-Process Layer를 추가하고 Layer로는 방금 Volume에 추가한 Layer를 선택해주고 안티 앨리어싱도 적용해준다.

레이어 컴포넌트 추가
안티 앨리어싱

Fast Mode는 그다지 좋은 효과는 아니지만 연산이 덜 들어간다.

Fast Mode

효과 추가하기

효과를 추가할 땐 Post-Processing Profile이 등록된 Post-Processing Volume에서 Add Effect를 해도 되고 이전에 생성한 Post-Processing Profile으로 접근해 Add Effect를 해도 된다.

Volume에서 추가
Profile에 접근해 추가

Bloom을 추가해 Intensity를 높이면 빛 부분이 더 밝아진다.

Bloom Intensity

Soft Knee는 뿌옇게 되는 정도

Soft Knee

Diffusion은 반사 정도이다.

Diffusion

Vignette는 바깥 쪽의 화면의 가장자리를 어둡게 하는 효과다.

Intensity를 높여 검은색 가장자리 범위를 늘릴 수 있고

Smoothness를 높여 그 가장자리의 검정색 밀도를 높일 수 있다.

Vignette

Ambient Occlusion을 사용하여 빛이 닿지 않는 그림자의 깊이와 색을 조절할 수 있다.

Intensity로 세기를 조절 가능하고

Thickness Modifer로 보조적으로 조정할 수 있다.

Color는 어두운 부분 색이다.

Ambient Occlusion

Ambient Occlusion을 사용하면 씬이 좀 어두워지기 때문에

Auto Exposure를 같이 사용한다.

Minimum의 값이 작아지면 밝아지고 커지면 어두워진다.

Maximum이나 Filtering으로는 발생 효과의 범위를 변경할 수 있다.

Auto Exposure의 Minimum 값이 낮을 수록 Bloom의 값이 강해지는데 같이 조율 하면 된다.

Bloom 값 줄이기
조율하기

Color Grading은 전체적인 분위기를 조절할 수 있다.

Temperature를 낮추면 온도가 낮아지듯 차가운 느낌을 주고 높아지면 따뜻한 느낌을 준다.

Tint는 색을 바꿔서 Temperature와 함께 다른 분위기를 준다.

Temperature

Hue Shift는 신기한 형광 느낌을 준다.

Hue Shift

 

결과

포스트 프로세싱 적용 x
포스트 프로세싱 적용 o

 

플레이

 

플레이 영상

 

스카이 박스

Material을 생성하고 쉐이더를 Skybox 중 하나를 선택하여 그것을 Lighting - Environment - Skybox Material에 입혀 배경 효과를 줄 수 있다. 

Skybox
Skybox Material

일반적인 Skybox Shader는 Procedual이다.

효과 적용

에셋 스토어 이용

또는 에셋 스토어에서 에셋을 다운받아도 된다.

Asset Store

6면의 Material이 없다면 Material의 쉐이더에서 Skybox - 6sided를 선택하면 된다.

6Sided

씬을 정육면체 면으로 덮듯이 Skybox Material로 둘러 싸여진다.

6sided Material 적용

Inspector의 Exposure를 조절하면 밝게 할 수도 있다.

Exposure

Rotation을 조절할 수도 있는데 Skybox의 y축으로 회전한다. - 이 값을 조정하면 계속 빙글빙글 도는 환경을 만들 수도..?

Rotation

Tint Color을 조절하여 전체적인 분위기를 바꿀 수도 있다.

Tint Color

 

조명

그림자가 너무 부각된다면 세기를 낮춘 보조광을 둬서 덜 부각되도록 하는 방법이 있다.

보조광

다른 방법으로는 Shadow Strength를 낮춰서 조절하는 방법이 있다.

Shadow Strength

오후의 느낌을 주기 위해 보조광에 색을 입혔다.

오후 느낌

안개 효과

먼 거리에 있는 에셋이 그다지 멋지지 않을 때 미스테리한 느낌을 줄 수 있고 플레이어가 멀리 있는 것에 눈이 가지 않도록 해준다.

Lighting - Environment - Other Settings - Fog 체크

Fog

Linear -> Exponential -> Exponential Squared 순으로 안개 강도가 강하다.

Fog Mode

Linear는 Start와 End가 있어서 볼수 있는 거리를 정할 수 있다.(Start부터 End까지 보임)

Linear

히트박스

적들의 콜라이더가 너무 정교해서 맞추기 어려운 상황이다.

그래서 박스 콜라이더를 밖에 씌워서 충돌 체크를 더 쉽게 했다.

맞추기 어렵다.

* 기존의 정교한 콜라이더는 삭제해도 된다.

** 시작할 때 잔렉이 심하다면 적들이나 플레이어가 나무에 끼지 않았는 지 확인하자.

박스 콜라이더

 

사운드 이펙트

적이 죽었을 때 폭발 파티클이 인스턴싱 되는 걸 이용하여 여기에 오디오 소스와 클립을 붙이면 손쉽게 적용할 수 있다.

사운드 이펙트

이름이 길더라도 이것이 무슨 일을 하는 지(특히 여러가지 일을 한다면) 알려줄 필요가 있다.

이름 수정하기

이후에 리팩토링을 위해 코드도 수정한다. VFX(Visual Effects) -> FX, 

리팩토링

리팩토링을 하면서 수정한 코드가 드래그 앤 드롭으로 참조하는 변수라면 수정했을 시 참조가 None값이 되니 다시 참조해줘야한다.

다시 참조

* 가장 완전한 방법은 오디오와 시각효과를 분리해 보관하는 것이다.

뮤직 플레이어

배경음악을 Play On Awake와 Loop를 키고

플레이 하다가 플레이어가 죽어서 씬이 다시 로드 되면 배경음이 반복되는 현상이 있고 이것을 막고싶을 때

=> 싱글톤 패턴을 사용하는 방법이 있다.

배경음악 반복

 

싱글톤 패턴

클래스를 인스턴스화 할 때 하나의 인스턴스로 제한하는 소프트웨어 패턴이다.

씬에 MusicPlayer타입을 다 찾고 그 갯수가 1보다 크면 삭제하고 1보다 작다면 DontDestroyOnLoad로 파괴되지 않게 한다. - 특정 유일 오브젝트가 계속 씬에 존재함

=> 씬에 하나만 존재하므로 씬이 다시 로드 되더라도 배경음악이 끊기지 않고 실행된다.

싱글톤 패턴

경고 넣기

Track Group을 추가하여 그룹화를 할 수 있다.

Track Group

UI에 이미지 넣기 - Texture type은 Sprite모드로 만들어줘야함

이미지 넣기

쉬프트를 누르고 늘리면 비율대로 늘어난다

이미지 늘리기

이미지 아래에 텍스트도 추가했다.

Slackbar Text

처음에 생성한 Track Group의 트랙에 이미지를 드래그 앤 드롭하면

Track Group

타임라인을 플레이 해보면 해당 시간에 이미지가 팝업처럼 나오게 된다.

그룹 - 트랙 이미지

사운드 파일도 추가해서 소리가 나오게 할 수 있다.

그룹 - 트랙 사운드

사운드 파일마다 볼륨을 조절해야 해야 된다. 아니면 너무 크거나 작거나 할 수 있다.

볼륨 조절하기

사운드 파일을 겹쳐서 재생시킬 수도 있다.

* 사람들이 대사에 집중하도록 하는 방법 중 하나는 대사에 중요한 힌트 등을 넣는 것이다.

** 캐릭터가 항상 말하고 있지 않도록 간격을 추가하고 특정 상황에 특정 대사를 하는 것도 좋다.

사운드 겹치기

 

 

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

히트박스와 사운드 이펙트  (0) 2022.09.01
뮤직 플레이어  (0) 2022.09.01
타임라인에서 Wave 설정하기  (0) 2022.09.01
FindWithTag()  (0) 2022.08.31
적 프리펩  (0) 2022.08.30

Wave 설정

1. 빈 오브젝트를 만들어(transform 리셋) 적 오브젝트들의 부모로 만든다.

2. 적 오브젝트들을 배치한다.

3. 1번에서 만든 부모 오브젝트의 타임라인을 만든다.

4. 적들 프리펩을 타임라인에 드래그하여 애니메이션을 만든다.

Wave
Add Animation Track

이런 식으로 만들 수 있다.

여기서 단점이 있는데 플레이어가 해당 시점에 어떻게 이동하고 있는지 같이 볼 수 없어서 불편하다.

Wave1

이는 마스터 타임라인(플레이어 타임라인)에서 +를 눌러 Control Track을 생성하여 Timeline 프레임 쪽에 Wave1(적 타임라인)을 추가해 프레임 진행을 같이 볼 수 있다.

* 추가한 Wave1을 이동시키면 어느 프레임에 실행할지도 정할 수 있다. - 클릭하고 앞 쪽에는 줄이기만 할 수 있고 뒤로는 늘리거나 줄일 수도 있다.

** 플레이어가 제일 기니까 마스터 타임라인 기준

Control Track

늘리면 늘린 범위가 Hold라고 뜨는데 아까 했던 것처럼 애니메이션을 넣을 수 있는 공간이 Hold 범위이다.

늘리기

 

두 번째 Wave

첫 번째 Wave를 프리펩화 시켜서 여러번 사용 할 수 있게끔 만든다.

* 이전에 바이퍼 프리펩이 Animator를 가지고 있는 지 부터 확인한다. -> 없으면 Wave프리펩이 잘 생성 안 되는 상황이 있었다. => 이 때 Override 해버리면 Viper가 다 똑같이 변경되어 같은 움직임을 보이니 처음부터 잘 설정해야 한다.

Wave1 프리펩화

방금 생성한 프리펩으로 생성한 웨이브의 타임라인은 상대적으로 이동한다. (같은 좌표로 이동하는 게 아니라 자신의 기준에서 이동) => 이후 이를 이용해 하위 프리펩들의 움직임(타임라인 애니메이션)을 수정하고 Override하지 않음으로 인스턴스화를 시켜 하나의 프리펩에 여러 행동을 할 수 있게 한다.

* Override하면 두 프리펩 모두 적용된다.

Wave 2

 

실습 해보기

SetActive(false)한 것처럼 반투명 하게 숨겨져 있는 것들은 아직 나올 때가 되지 않았다는 것이다.

타임라인을 움직이면 활성화 비활성화가 달라지고 이에 접근하려면 타임라인 박스를 더블클릭하면 된다.

일시적 비활성화

 

FindWithTag()

FindWithTag는 앞에 GameObject가 붙는데 Tag가 GameObject로부터 접근할 수 있으므로 GameObject가 붙는다.

FindWithTag()

그리고 이전의 코드에서 parent는 transform 타입이므로 이 게임 오브젝트 타입인 parentGameObject도 trasform에 접근해야한다.

trasform

이렇게 하면 FIndWithTag로 찾아도 잘 담기는 걸 확인할 수 있다.

FindWithTag 참조

적 프리펩

새로운 적 프리펩을 생성해준다.

적 프리펩

플레인에 올려놓고 하면 오브젝트를 끌어다놨을 때 그 위치로 스냅된다.

플레인

적 콜라이더의 자손에게 접근하기 어려운 경우 부모에 Rigidbody를 붙여주면 자손의 Collider도 체크한다.

Collider 체크

AddComponent하면서 바로 변수에 집어넣을 수 있다.

AddComponent

 

적 체력과 점수

적 체력을 SerializeField로 설정하여 인스펙터에서 조정할 수 있도록 했다.

적 체력

적 체력이 1 미만일 때만 죽는 KillEnemy 함수가 호출되게 했다.

조건

적을 맞출 때마다 점수를 얻게 했다.

점수

 

피격 파티클 시스템

피격 파티클을 만들어 적이 맞을 때마다 불러오게 했다.

피격 파티클

'유데미 강의 > C#과 Unity로 3D 게임 개발하기 : 아르곤 침공' 카테고리의 다른 글

FindWithTag()  (0) 2022.08.31
적 프리펩  (0) 2022.08.30
TextMeshPro, Score UI 연동  (0) 2022.08.30
Public Method  (0) 2022.08.30
런타임 파티클 생성  (0) 2022.08.30

TextMeshPro

기존 Text에 비해 더 화려하고 좋은 최신 방법이다.

Pakage Manager에서 TextMeshPro를 다운받고 Essential을 설치한 뒤

TextMeshPro

필요한 폰트를 다운 받아 Font Asset Creater의 Source Font File에 등록하고 Generate Font Atlas를 눌러 생성한다.

Font Asset Creater

이후 save as를 눌러 TextMeshPro 폴더에 저장한다.

저장하기

Screen With Screen Size

TextMeshPro의 앵커를 조절해도 폰트 크기는 고정이 되는데 이를 해결하려면 Canvas Scaler의 UI Scale Mode를 Screen With Screen Size로 하면 비례해서 커지거나 작아진다.

 

Score UI 연동

TextMeshPro는 using TMPro를 써줘야 한다.

* TMP_Text는 Canvas 안의 요소이고 TextMeshPro는 3D World의 Mesh이다.

using TMPro

이전에 계산한 score를 .ToString()으로 바꿔서 텍스트에 넣는다. 

ToString
실행 결과

 

+ Recent posts