초간단 유니티 폭팔효과 구현하기


유니티로 게임개발할때 폭팔하는 효과를 주고 싶을때가 있어요. 저는 주로 객체에 폭팔반경만큼의 Circle Collision 컴포넌트를 하나 만들어서 비활성화 해 놓고 실제 폭팔이 필요할때 이 객체를 Active 해주는 방법을 사용했었는데요,


이렇게 하니까 간혹 폭팔이 감지가 안될때가 있어서 이제는 아래 코드처럼 방법을 바꿔서 사용한답니다.


제가 사용했던 예제 코드를 올려 보아요.


public class Oil : MonoBehaviour

{

    private void OnCollisionEnter2D(Collision2D collision)

    {

        if (collision.gameObject.tag == "Cannon")

        {

      // 폭팔효과

            GameObject toInstance = Resources.Load<GameObject>("Prefabs/Explosion");

            GameObject explosion = Instantiate(toInstance, transform.position, transform.rotation);

            explosion.transform.localScale = new Vector3(3, 3, 3);


           // 폭팔범위 지정 및 물리충돌감지

            Collider2D[] colliders = Physics2D.OverlapCircleAll(transform.position, 3.0f);

            foreach (Collider2D hit in colliders)

            {

                Enermy myParent = hit.GetComponentInParent<Enermy>();

                if (myParent != null)

                    myParent.GetComponent<Enermy>().TakeDamage(2); // 범위내 적에게 데미지 선사

            }

        }

    }

}


코드를 잠깐 설명하자면,


지금 저기 Oil 이라고 생성된 객체에 포탄이 날라와서 맞으면 지금 Oil이 폭팔하는 것 처럼 효과를 나타낼껀데요,

코드에서 저 붉은색으로 표시된 부분이 폭팔효과를 구현하는 코드입니다. 


transform.position  : 폭팔이 일어나는 위치

3.0f : 폭팔의 범위(마음대로 조정하면됩니다. 폭팔력이 크면 더 큰 수로 5.0, 10.0등등 작으면 1.0 2.0처럼 작게.


그리고 저 폭팔의 범위안에 있는 Object 들이 차례로 걸려나오니, 폭팔의 효과를 받을 객체는 저 foreach 문 안에서 처리해주면 되겠지요.