본문 바로가기
유니티 Unity/유니티 기능 구현

유니티 C# : 주변 오브젝트 날려버리기 - AddExplosionForce

by TODAYCODE 2021. 7. 2.
반응형

유니티에서 게임을 제작하다보면 폭발을 구현해야할 때가 있다.

사실 펑하고 터지면서 연기가 나는 등의 이팩트는 에셋을 이용하면 되지만,

 

폭발이 일어났을 때 주변에 있는 오브젝트가

밀려나거나 반동으로 날아가버리는 등

상호작용을 구현해야 할 필요가 있다.

 

다양한 방법들이 존재하겠지만

내가 주로 사용하는 방법을 공유해보도록 하겠다.

 

이전에 업로드 했던 주변 콜라이더 검출 방법에 대한 글과

그리고 Rigidbody의 AddExplosionForce함수,

foreach문을 사용해서 손쉽게 코드를 완성할 수 있다.

 

유니티 C# : 일정 범위에 존재하는 오브젝트 검출하는 방법

유니티로 게임을 만들다보면 일정 범위 안에 존재하는 오브젝트를 찾아야하는 경우가 잦다. 예를 들면, VR에서 플에이어가 무언가를 잡을때 잡을 수 있는 반경을 설정하거나 폭발효과로 일정 주

coding-of-today.tistory.com

 

 

완성된 코드는 다음과 같다

// 콜라이더를 담을 수 있는 배열을 만든다.
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도 당연히.

반응형

댓글