[Basic] 레이어로 선택적 충돌감지하기



게임을 만들다 보면 오브젝트끼리 충돌이 일어나는 경우가 많다. 하지만 오브젝트끼리 충돌이 일어나면 안되는 오브젝트들도 있다.그럴 때 스크립트에서 수동적으로 코드를 작성하여 충돌을 막아주는 방법이 있지만 우리가 설정을 조금만 바꿔준다면 자동으로 충돌을 무시하게 해주는 방법이 있다.

먼저 스크립트상에서 수동적으로 막아주는 코드를 보자.

    private void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Bullet")
        {
            return;
        }
        else
        {
            Destroy(gameObject);
        }
    }

위의 코드는 만약 부딪힌 물체의 테그가 Bullet이면 무시하고 아니라면 현재 스크립트를 컴포넌트로 가지고 있는 오브젝트를 파괴하는 것이다. 이처럼 코드로 충돌이 막는 방법이 있다. 다음으로는 프로젝트의 셋팅을 바꾸는 방법이다.


그러기 전에 사전에 준비해야 하는 것들이 있다.

우선 내가 충돌이 일어나지 않았으면 하는 오브젝트를 눌러 인스펙터창을 보면

image

위와 같이 Layer라는 걸 선택할 수 있게 되어 있다.

Layer항목을 열어 ADd Layers를 누르면 다음과 같이 나오는데

image

여기서 내가원하는 Layer를 추가해주면 된다. 지금부터는 총알이라는 오브젝트가 있고 총알과 총알은 충돌하지 않게끔 설정을 해 볼 것이다.

그렇기 때문에 Layers에 Bullet이라는 항목을 추가 하겠다.

image

추가하고 나서 총알 오브젝트의 Layer를 Bullet으로 바꿔주고

image

그 다음 유니티 상단에 Edit을 누르고 Project Settings를 누른다음 Physics탭을 들어가서 아래로 내려보면 다음과 같이 나오는데

image

저기서 체크 즉, 활성화가 되어 있으면 충돌을 감지한다는 뜻이고, 체크가 해제 즉,비활성화 되어 있으면 충돌은 무시한다는 뜻이다. 우리는 총알과 총알끼리의 충돌을 무시할 것이기 때문에 다음과 같이 비활성화 해주면 된다.

image

그럼 이제 총알과 총알은 충돌하지 않게 된다.




© 2022. by KSC

Powered by sora