팀 프로젝트 작업을 하던 중 적에게 근접해서 탱킹을 해야하는 유닛이 원거리에서 짤짤이만 날려대는 문제가 생겼다.

Untitled

이유는 실제 데미지를 주기 위한 콜라이더 박스와 적을 감지하는 콜라이더 박스가 구분이 안되어 부모 스크립트에서 모두 받아와 버린 것이 문제였다.

적을 감지하기 위한 콜라이더와 데미지를 주는 영역 모두 trigger로 설정을 해놓았는데, rigidbody의 Ontrigger 함수는 모든 자식의 콜라이더에서 정보를 받아온다.

이를 방지하기 위해 자식의 콜라이더와 부모의 콜라이더를 구분하는 것이 필요하다.

자식의 콜라이더와 부모의 콜라이더를 구분하는 법은 단순하다. 자식의 콜라이더에 rigidbody를 붙여주면 된다.

하지만 이 경우엔 자식 오브젝트가 자체적으로 물리력을 가지게 되어 부모 오브젝트를 따라오지 않는다.

Untitled

이럴 땐 Rigidbody의 Body Type을 Kinematic으로 바꿔주면 된다. Kinematic은 중력과 힘의 영향을 받지 않고, Dynamic rigidbody를 가진 콜라이더랑만 상호작용한다.

이 경우에는 자식 rigidody 역시 부모의 움직임을 따라 이동하게 된다.