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
실행 결과

 

캡슐화

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

* 그러나 지금 경우는 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

+ Recent posts