적 체력과 점수

적 체력을 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
실행 결과

 

캡슐화

캡슐에 넣는다는 뜻으로 코드의 각 부분이 알아야할 기본 수준의 접근 권한을 갖게 된다. -> 모든 것이 다른 모든 것에 접근하지 못하도록 해야한다.

* 그러나 지금 경우는 Enemy 클래스가 ScoreBoard 클래스에 영향을 주게 만들어야 함

 

Public vs Private

private로 작성한 메서드를 다른 메서드에서 접근하려고 하면 불가능하다.

public은 가능하다.

 

함수 사용 형식

접근제한자 반환형 함수이름 매개변수

public void GoRight(float speed) { 코드; }

 

실 사용 코드

public IncreaseScore 함수로 score에 점수를 더한다. (Enemy마다 다른 점수가 추가될 거니까 매개변수를 받았음)

IncreaseScore

FindObjectOfType<>();를 이용하는데 프로젝트를 둘러보고 발견하는 첫 타입을 불러온다.

FindObjectOfType

scoreBoard로 접근하여 public 함수인 IncreaseScore를 호출한다.

public 함수 호출

 

런타임 파티클 생성

오브젝트를 SetActive(false)하면서 파티클도 생성하고 싶을 때 코드로 런타임에 파티클을 불러오면 된다.

적 스크립트에 충돌시 Particle을 Instantiate()를 한다.

Instanciate()

그리고 파티클이 생성 시 Play 되는 걸 원하기 때문에 Play On Awake를 킨다.

Play On Awake

적 파티클 생성을 관리하기 위해 부모를 따로 지정하여 생성하고

부모 설정

각각 적들에게 인스펙터에서 드래그 앤 드롭으로 파티클과 부모 트랜스폼을 넣어준다.

드래그 앤 드롭
자가파괴

이후 파티클 프리펩에 자가파괴 코드를 넣어서 3초 뒤 파괴시킨다.(파티클 생성 후 3초뒤 파괴)

프리펩 자가파괴

* 적들은 파괴되면서 파티클을 생성하고(에너미 스크립트도 꺼짐) 일정 시간 뒤에 파티클도 꺼줘야하기 때문에 파티클 프리펩에 Self Destruct를 넣어줬다.

 

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

TextMeshPro, Score UI 연동  (0) 2022.08.30
Public Method  (0) 2022.08.30
폭발 파티클 효과 만들기  (0) 2022.08.30
파티클 충돌 감지  (0) 2022.08.30
충돌과 트리거  (0) 2022.08.30

폭발 Material

기존 Material을 복사해서 쉐이더를 Standard Unlit으로 바꾼다.

폭발 Material 생성

이후 생성한 Material을 씬 창의 파티클 시스템의 Renderer의 Material에 넣어준다.

Particle System Renderer

 

폭발 파티클 Shader

Rendering Mode의 Opaque는 빛 반사가 없는 모드이고

Color Mode의 Overlay는 회색을 기준(0.5)으로 높으면 더 번지게 낮으면 선명하지만 대비되게 만들어준다.

* 여기선 색을 블렌딩하기 위해 Color로 해줬다.

Particle Shader

StartColor를 Gradient로 설정하면 위치에따라 색이 바뀐다. 

Gradient

Random Between Two Colors는 각 파티클마다 색이 하나지만 두 색 사이 색 값으로 정해진다.

Random Between Two Colors
사잇 값이 나온다.

 

폭발 설정

Particle System

- Duration 1

- Start Lifetime 0.2~1 랜덤 => Random Between Two Constants로하면 0.2부터 1까지 랜덤으로 수명이 정해진다.

Shape

- Sphere

- Radius 3.5

Emission

- Rate over time 1000

 

Trails 설정

trails 설정을 통해 더 역동적으로 보이게 되었다.

Trails

 

Noise 설정

Noise 설정을 통해 파티클에 패턴을 줄 수 있다.

Noise
구불구불

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

Public Method  (0) 2022.08.30
런타임 파티클 생성  (0) 2022.08.30
파티클 충돌 감지  (0) 2022.08.30
충돌과 트리거  (0) 2022.08.30
헤더와 툴팁 속성  (0) 2022.08.29

파티클을 총알로 사용하기

해야할 것

1. 파티클 콜리전과 메시지 전송이 켜져 있는지 확인

파티클 콜리전

- Send Collision Messages가 체크 되어야 함

메시지 전송

Type

- Plane은 사용자가 정의한 평면 값으로 반사

- World는 월드에 대해 반사

Collision Type을 World로 했을 시

Min Kill Speed

- 총알이 튀기는 게 싫을 시 Min Kill Speed를 조정해주면 된다. (1이면 속도가 1보다 낮을 때 죽이지 마라)

Min Kill Speed

 

2. 타겟 Collider의 Trigger 끄기

- 타겟의 Collider가 Trigger면 통과해버림

Trigger 끄기

 

3. 타겟에 OnParticleCollision()을 사용하기

* 만약 충돌 체크가 여러 번 되어야 하는데 한 두 번만 된다면 파티클 시스템 컴포넌트의 StartSpeed를 낮추는 방법으로 해결될 수 있다.

OnParticleCollision()

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

런타임 파티클 생성  (0) 2022.08.30
폭발 파티클 효과 만들기  (0) 2022.08.30
충돌과 트리거  (0) 2022.08.30
헤더와 툴팁 속성  (0) 2022.08.29
배열과 foreach문  (0) 2022.08.29

충돌

- Collider끼리 부딪치면 물리시스템이 충돌하면서 힘이 가해진다.

- 서로 밀어내려는 힘이 작용한다.

- 충돌하는 둘 중 하나는 Rigidbody가 붙어있어야 한다. -> Rigidbody가 물리 시스템에게 물리를 적용하라고 하기 때문

Terrain Collider

Terrain Collider에서 Enable Tree Collider를 키면 나무에도 Collider가 켜진다.

나무 Collider를 켰을 때 적이 죽지않는 문제가 발생할 수 있는데 이 경우는 나무 Collider를 꺼야할 수도 있다.

Terrain Collider

 

트리거

- 콜라이더가 겹치거나 만나는 순간 발동된다.

- Collider 컴포넌트의 Is Trigger을 활성화할 시 어디에 부딪혔을 때 튕겨나가지 않고 통과한다.

- 트리거 메시지를 전송해서 이에 따라서 트리거 메시지를 받으면 무엇인가를 할 수 있다.

- 충돌하는 둘 중 하나는 Rigidbody가 붙어있어야 한다. -> Rigidbody가 물리 시스템에게 물리를 적용하라고 하기 때문

 

Collision/Trigger Matrix

Collision/Trigger Matrix

Collision action matrix

  • 빈 공간은 이벤트가 없다는 뜻임
  • Static collider : 개체에 Collider가 있지만 Rigidbody가 없는 경우
  • Rigidbody Collider : Rigidbody와 Collider가 있는경우
  • Kinematic Rigidbody Collider : Rigidbody 옵션에 Kinematic이 활성화 되어있고 Collider가 있는 경우
  • Static Trigger Collider : Rigidbody가 없지만 Trigger가 켜져있는 경우
  • Kinematic Rigidbody Trigger Collider : 트리거도 켜져있고 Rigidbody의 Kinematic도 켜져있는 경우

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

폭발 파티클 효과 만들기  (0) 2022.08.30
파티클 충돌 감지  (0) 2022.08.30
헤더와 툴팁 속성  (0) 2022.08.29
배열과 foreach문  (0) 2022.08.29
발사 Input System  (0) 2022.08.26

헤더

헤더는 보이는 것 처럼 머릿글같이 변수들이 대략 뭘 뜻하는지 개념적으로 묶어놓는 것이다.

헤더
헤더 인스펙터

* 기본적으로 변수 이전에 속성이 먼저 적용되므로 변수 이전에 속성을 적는다.

 

툴팁

툴팁은 인스펙터 창의 변수에 커서를 가져다 댔을 때 보이는 창이다. (설명 등 사용자가 기록)

툴팁
툴팁 2

이런 식으로 작성해놓으면 나중에 봤을 때도 이해하기 쉽다.

헤더와 툴팁

 

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

파티클 충돌 감지  (0) 2022.08.30
충돌과 트리거  (0) 2022.08.30
배열과 foreach문  (0) 2022.08.29
발사 Input System  (0) 2022.08.26
중첩 프리펩  (0) 2022.08.26

배열

변수가 상자라고 할 때 상자를 보관하기 위한 상자를 배열이라고 생각하면 된다.

- 배열은 같은 타입의 여러 개체를 하나의 변수에 저장할 수 있게 해준다.

- 타입[] 변수명 = { }; 으로 사용하거나 (넣을 요소가 있을 때)

- 대괄호 안에는 인덱스가 들어가는데 0번부터 시작된다. 

string[] names = { "Rick", "Ben", "Gary" };
// names[0] == "Rick" --> true
// names[1] == "Ben" --> true
// names[2] == "Gary" --> true

배열 선언

 

 

Foreach문

컬렉션을 가로지르기 위한 흐름 제어문이다. => 컬렉션에 있는 모든 것에 가서 무엇인가 해라

foreach (오브젝트타입 item in 변수명) { 실행구문; } --> item은 컬렉션의 개별 요소(사용자 변수명), in 뒤의 변수명은 컬렉션 변수명을 의미

fire버튼이 눌렸을 시 foreach문을 돌아 배열 안의 파티클 오브젝트들을 키고 뗐을 시 끄는 기능이다.

Active Deactive
foreach

 

리팩토링

true false만 다름

위와 같이 함수가 두 개고 true와 false 값만 다를 때

리팩토링

하나의 함수에 매개변수를 전달하는 식으로 코드를 줄일 수 있다.

* 파티클 시스템의 모듈들은 프로퍼티 타입이라 가져올 수 없는데 컴포넌트이기도 해서 변수에 넣어놓고 사용하면 된다.

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

충돌과 트리거  (0) 2022.08.30
헤더와 툴팁 속성  (0) 2022.08.29
발사 Input System  (0) 2022.08.26
중첩 프리펩  (0) 2022.08.26
레이저 총알 파티클  (0) 2022.08.26

배운 것들

이번 주 강의에서는 나만의 볼 게임을 만들어봤다.

인스펙터에서 슬라이더처럼 사용할 수 있는 Range라는 것을 배웠고

Range
Range 2

자동으로 컴포넌트가 붙는 RequireComponent라는 것도 배웠다. -> 꼭 필요한 컴포넌트일 때 사용

RequireComponent

Collision을 체크할 때 tag 비교를 여러가지 방식으로 할  수 있다는 것도 배웠다.

tag 비교

플랫폼이 움직이는 상황에서 공이 그 위에 올라갔을 때 공은 정지해있고 플랫폼은 움직여서 공이 떨어지는 경우가 발생하는데 이를 수정하기 위한 쉬운 방법은 공의 부모를 해당 플랫폼으로 설정하는 것이다.

이 방법에는 약간의 절차가 필요하다.

1. 플랫폼의 부모(Ground) scale은 (1, 1, 1)로 고정시키고 Collider를 키우고 싶은 크기만큼 늘린다.

Ground

2. 플랫폼의 자식 스케일을 조정하여(부모의 콜라이더 크기와 같게) 여기에 Mesh Renderer 컴포넌트를 붙인다.

Platform

3. OnCollisionEnter에서 태그로 체크하여 Ground를 공의 부모로 만들어주면 공의 모양이 깨지거나 하는 일이 없어진다.

Ground 부모 설정

 

ProGrid, ProBuilder

ProGrid는 씬에 가상의 격자무늬를 만들어 오브젝트를 설정한 간격으로 이동하게 만들 수 있다.

ProGrids
ProGrids 2

ProBuilder는 간단한 프로토타입을 만들 때 자주 쓰이는 패키지인데

ProBuilder

여러가지 도형을 만들 수도 있을 뿐만 아니라 UV 에디터를 사용하여 포토샵으로 수정한 메시를 다시 입힐 수도 있다.

UV mesh 수정
ProBuilder 2

 

플레이 영상

이동과 점프는 AddForce로 구현하였다.

아래 움직이는 플랫폼에 닿았을 때는 포스트프로세싱 Voulme과 Layer를 사용하여 푸른색 효과를 주었다.

흐르는 듯한 용암은 Texture에 Wrap mode를 repeat로 두고 코드로 Material offset을 움직여서 만들었다. 

Rolling Ball

 

 

한 주 후기

 이번 주는 복습하는 느낌으로 공 굴리기 프로젝트를 강사님을 따라 만들어 보았다. 움직이거나 점프, 움직이는 플랫폼, 포스트 프로세싱 등을 제외하면 교육생들 본인이 자유롭게 만들 수 있는 시간이 주어졌다. 그래서 지금까지 배웠던 것들을 다시 복습하고 내가 놓친 부분을 다시 돼새기는 시간이 되었던 것 같아서 좋았다.

 이번 주에는 위에서 적어놓은 것처럼 유니티에서 부모 오브젝트와 자식 오브젝트 간의 관계를 이용하여 트랜스폼에 영향을 주고 안 주고에 대해 새로 배웠고 이후에 자습 시간을 통해 유데미 강의인 'C#과 Unity로 3D 게임 개발하기'에서 '아르곤 침공'의 우주선을 만들 때 복습하는 시간을 가질 수 있었다. 복습하면서 중간에 놓친 부분 중 하나는 용암의 Offset을 조정하는 단계에서 '왜 계속 같은 모양만 보이지?' 하고 있었는데 용암 Texture의 Wrap mode가 Repeat가 아니고 Clamp여서 그랬던 거였다. 이렇게 복습하는 기회가 없었다면 나중에 좀 더 고생을 했을 거라고 생각이 들었다. 사실 지금까지 배웠던 내용들이 많은 만큼 까먹거나 이해를 했다고 해도 막상 내가 생각한 방식대로 써먹지 못할 때가 생길 수도 있다고 생각한다. 그래서 수업시간뿐만 아니라 개인적으로도 복습하는 시간을 많이 가져야겠다고 생각했다.

 다음 주도 열심히 개발공부 해서 더 단단해진 내가 되어야겠다. 다음 주도 파이팅!

 

 

유데미코리아 바로가기

본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.

+ Recent posts