반응형
유니티에서 게임을 제작하다보면 폭발을 구현해야할 때가 있다.
사실 펑하고 터지면서 연기가 나는 등의 이팩트는 에셋을 이용하면 되지만,
폭발이 일어났을 때 주변에 있는 오브젝트가
밀려나거나 반동으로 날아가버리는 등
상호작용을 구현해야 할 필요가 있다.
다양한 방법들이 존재하겠지만
내가 주로 사용하는 방법을 공유해보도록 하겠다.
이전에 업로드 했던 주변 콜라이더 검출 방법에 대한 글과
그리고 Rigidbody의 AddExplosionForce함수,
foreach문을 사용해서 손쉽게 코드를 완성할 수 있다.
완성된 코드는 다음과 같다
// 콜라이더를 담을 수 있는 배열을 만든다.
Collider[] colls;
// 반경 10f에 위치한 오브젝트들을 배열에 담는다
colls = Physics.OverlapSphere(transform.position, 10f);
// foreach문을 통해서 colls배열에 존재하는 각각에 폭발효과를 적용해준다.
foreach (Collider coll in colls)
{
// 조건문을 사용해서 특정레이어에 속한 오브젝트에만 영향을 줄 수 있다.(ex-플레이어만 날아가도록)
if (coll.gameObject.layer == 8)
{
// 해당 오브젝트의 Rigidbody를 가져와서 AddExplosionForce 함수를 사용해준다.
// AddExplosionForce(폭발력, 폭발위치, 반경, 위로 솟구쳐올리는 힘)
coll.GetComponent<Rigidbody>().AddExplosionForce(100f, transform.position, 20f, 20f);
}
// 코드 정리.
// 검출된 오브젝트들 중에서 8번 레이어에 속한 오브젝트 각각을,
// 폭발위치(coll오브젝트위치아님)기준으로 반경 20f까지 100f의 폭발력과 20f의 상향력으로 날려버린다.
}
나는 주로,
CreateEmpty를 만들어서 Boom으로 이름을 바꾸고
해당 코드를 적은 스크립트를 넣은 뒤 Prefab으로 저장해둔다.
그리고 폭발이 필요할때마다
폭발효과 에셋과 Boom을 Instantiate 해주면
실감나게 터지는 듯한 효과를 줄 수 있다.
물론, Boom은 몇초후에 자동으로 없어지도록 코드를 추가해줘야
하이어라키 창이 쓸데없이 늘어나는 것을 방지할 수 있다.
끝으로,
AddExplosionForce함수를 사용하려거든
오브젝트에 rigidbody 넣는 것을 잊지 말자
collider도 당연히.
반응형
'유니티 Unity > 유니티 기능 구현' 카테고리의 다른 글
[유니티] Rigidbody(리지드바디) 기본 속성 값 파악하기 (0) | 2021.09.09 |
---|---|
[유니티] Invoke(인보크) 메소드의 사용법 총정리 (1) | 2021.09.08 |
월드 UI가 플레이어 입장에서 항상 보이도록 만들기 (0) | 2021.06.19 |
유니티 C# : 타임어택 - 시간이 줄어드는 UI 구현 (2) | 2021.06.18 |
유니티 C# : 일정시간마다 랜덤한 좌표에 오브젝트를 생성하기 (0) | 2021.06.17 |
댓글