이 글은 프롭(prop) 정의와 데미지 시스템에 대한 강의를 바탕으로 정리한 글이다.
오늘 만들어 볼 것은 구체가 떨어졌을 때 Prop이 파괴되도록 만들고 데미지 값을 원 중심에서 멀어지면 약해지도록 설정해서 스플래시 데미지를 구현해볼 것이다.
Prop 제작
먼저 해야할 것은 Prop를 만드는 것이다.
모양은 큐브 형태로 만들었다.
큐브의 이름은 'Small prop'

물리작용이 필요하기 때문에 Component에서 Rigidbody를 추가한다.

Prop 스크립트
이제 본격적으로 Prop을 정의해볼 것이다.
1. 점수 및 체력 설정
'Small prop'에 새로운 C# 스크립트를 추가한다.
Prop에는 점수와 체력이 필요하다.
점수는 prop이 파괴된 것을 게임 매니저에게 알리고 점수를 통해 게임 클리어 여부를 판가름해야하기 때문에 필요하다.
체력은 일정 데미지를 받았을 때 파괴되어야하기 때문에 필요한 요소다.

public int score = 5;
스코어는 파괴되었을 경우 5점이 추가되도록 설정했다.
public float hp = 10f;
hp는 10으로 설정했다.
public ParticleSystem explosionParticle;
가운데 이 부분은 Prop가 파괴될 때 효과를 주는 코드다.
2. 받는 데미지 설정

Prop은 스스로 데미지를 받는 것이 아닌 외부의 힘에 의해서 데미지를 받는다.
그렇기 때문에 TakeDamage라는 함수를 사용해서 받을 데미지를 설정했다.
hp -= damage;
풀어서 설명하면 hp = hp-damage와 같다. damage를 받은 만큼 hp가 깍이는 것이라고 보면 된다.

if(hp <= 0)
"만약 0보다 작으면 죽는다"는 if문을 만들 것이다.
ParticleSystem instance = Instantiate(explosionParticle,transform.position, transform.rotation);
Instantiate 함수는 게임오브젝트를 복사(?) 찍어내는 함수다. 나중에 하나의 Prop으로 수많은 Prop을 찍어낼 예정이기 때문에 instance화 시켜준다.
Instantiate의 옵션으로 explosionParticel효과와 position, roration을 설정해서 생성 위치를 고정했다.

Destroy(instance.gameObject,instance.duration);
Destroy는 게임오브젝트를 씬에서 사라지게 하는 함수다.
위에서 만들었던 instance.gameObject를 넣어주고 일정 시간이 지난 후 사라지도록 duration을 추가했다. 게임오브젝트가 데미지를 받은 뒤 일정 시간 후에 씬에서 보이지 않도록 시간을 설정하는 것 같다.
gameObject.SetActive(false);
Prop을 수십개 생성할 예정이기 때문에 파괴하고 새로 생성하는 것은 너무 헤비 해진다. SetActive를 사용하여 Prop을 잠깐 꺼서 사라지고 다시 키는 방식으로 설정했다.
유니티에서 Prep으로 만들기
유니티에서 Prep으로 만들어주기 위해서 유니티로 돌아간다.
Hierarchy 창에서 Project 창으로 끌어서 Prep으로 만든다.

Prep으로 만들고 나면 이후 무한대로 복사해서 쓸 수 있다.
파괴되는 오브젝트는 이정도만 설정하면 된다.
문제는 구체(ball) 설정이다.
마음 단단히 먹고 다음 단계로 넘어가면 되겠다.
'프로그래밍⚡️ > unity' 카테고리의 다른 글
C# 유니티 상수와 열거형, 가위바위보 게임 코드 개선 (0) | 2022.07.17 |
---|---|
c# 조건문을 활용한 가위바위보 게임 만들기 (0) | 2022.07.08 |
3D 게임 제작 (1) - 방향키로 캐릭터 움직이고 점프 (0) | 2022.05.29 |
유니티 Light 오브젝트와 스크립트로 다루기 (0) | 2022.05.22 |
unity 3D 오브젝트 회전 주기 (0) | 2022.05.10 |