[Unity] Using Depth on Physics2D

유니티의 2D 물리 환경은 z axis을 고려하지 않는다. 두 물체 간 depth를 아무리 벌려놔도 충돌할 물체는 충돌한다. 하지만 단순히 Overlap을 체크하려는 용도라면 depth를 활용할 수 있다. ContactFilter2D에서 depth 체크를 지원한다.

주의) Rigidbody2D의 depth를 런타임에 조정하면 depth가 떨리는 등의 예기치 못한 버그가 발생할 수 있다. 적어도 2017버전에서는 그랬다. 하지만 Collider2D의 depth를 변경하는건 문제 없다. 따라서 Collider2D의 depth를 조정하려면 Rigidbody2D의 child로 두어야 한다.

구글링을 해보면 2D 환경에서 대체 왜 depth를 사용하는지 되묻는 글이 많다. 캐릭터가 상호작용할 수 있는 범위를 정할 수도 있고 적으로부터 숨을 때 사용할 수도 있다. 하지만 너무 많이 사용하지는 말자. 코딩 문제를 떠나서 유저가 헷갈린다.

수정)
범인은 Rigidbody2D의 Interpolate 옵션이었다. 이전 물리프레임의 z축을 쓸데없이 저장해두고 있다가 이를 보간하면서 떨림이 발생하는 버그였다.

Leave a Reply

Your email address will not be published.