본문 바로가기

만들고 싶은 QnA

Q. Unity, 물체가 움직이다가 바닥에서 갑자기 튀어올라요.

Unity에서 물체가 바닥 위를 지나가다가, 가끔 아무것도 없는 곳에서 퓽-하고 튀어오르는 경우가 있다. 

 

이해를 위해 사진을 첨부하자면...

땅 1의 콜라이더(Collider)와 다른 땅 2의 콜라이더 경계선에서 AddForce()를 이용해 힘을 받고있는 물체가 튀어오르는 현상이다. (꼭 AddForce가 아니라 다른 것일지도 모른다!)

 

이는 속도가 빠를수록 더 심해진다. 아마 콜라이더 경계선이 바뀌면서 물체가 바닥으로 떨어지려고 하고, 조금 바닥으로 떨어진 물체가 땅2 콜라이더와 겹쳐지면서 위로 튀어오르는 것이 아닐까 추측한다.

 

땅 1과 땅 2의 콜라이더를 완벽히 겹쳐도 이 현상은 사라지지 않는다. 공의 물체 충돌 예측을 Continuous로 바꿔도 여전히 일어난다.

 

콜라이더의 길이를 좀 길게해서 콜라이더끼리 겹치는 부분을 만들어주면 조금 나아지는 듯 하지만, 잘 모르겠다.(작동해도 미미하다)

 

개인적으로는 아래와 같이 프로젝트의 Physic 설정을 바꾸는 것이 효과가 좋았다.

Edit > Project Settings > Physics 에 들어가면 Default Contact Offset이 있다. 기본적으로는 0.01으로 설정되어 있는데, 이 값을 낮춰주는 것으로 효과를 볼 수 있다.

Contact Offset은 물리 엔진이 물체의 충돌을 감지할 때 물체의 표면이 겹치는 정도, 즉 표면간 간격 차이를 설정하는 것이다. 위에서 말한 문제점인 콜라이더가 없다고 생각해서 바닥으로 꺼졌다가, 겹쳐서 튕겨오르는 일을 줄일 수 있다는 것이다.

 

단, 단점으로는 물리 시뮬레이션이 정확해지니 그만큼 게임의 성능이 저하된다. 아마 잘 찾아보면 Default 설정말고, 원하는 콜라이더의 Offset만 바꿀 수 있는 기능이 있지 않을까?

'만들고 싶은 QnA' 카테고리의 다른 글

Q. 플레이어를 따라오는 적 만들기  (1) 2023.11.06