본문 바로가기

유니티 게임 개발하기/2D 게임 개발일지

유니티 2D -IsKinematic 옵션과 충돌에 대해서. (OnCollisionEnter)



2D슈팅 게임을 만드는 도중에, 새로운 사실을 알게 되어서 기록하기위해서 급하게 글을 쓰게 되었습니다!

강체(Rigidbody) 에서 볼 수 있는 옵션인 IsKinematic 에 대해서인데요,

예를들어 제가 다음과 같은 코드를 작성했다고 가정해 보죠.


void  OnCollsionEnter2D(Collsion2D other)

{


if(other.gameObject.CompareTag("Bullet_P"))

{

Debug.Log (hp--);

Destroy(other.gameObject);

}


if (hp < -0)

Destroy (gameObject);

}

이 코드에서 일반적이라면 적에게 총알이 맞으면 총알이 사라지게 되어야겠죠.
심지어 강체가 컴포넌트로 존재하지 않더라도, 컬라이더의 충돌을 감지하는 것이기 때문에 움직이는 오브젝트만 강체가 있으면  이 함수는 동작해야 합니다.
하.지.만!

저 IsKinematic 옵션이 걸린 강체가 맞는쪽에 있다면 ...
바로 이런 상황이 발생합니다.




네.. 말그대로 물리적 요소에 영향을 아예 받지 않게 되죠.

따라서 아예 충돌 카운트가 되지도 않고 총알만 튕겨나가게 됩니다.

따라서 충돌도 불가능해집니다.

왜 굳이 이렇게 되어있는지는.. 뭐 저도 잘 모르겠습니다. 이건 경험적인 지식이니까요.

이땐 IsKinematic의 체크를 해제 해 주시거나, 강체를 쓰지 않으신다면 아예 컴포넌트에서 지워버리는것도 좋은 방법이 될 거 같네요.


          해제하니 이렇게 잘 되는군요. 오늘 이것때문에 얼마나 고민을 했는지 원..

        다른 분들은 이걸로 실수하지 마세요~ 혹시라도 안되면 꼭 키네마틱 체크! 체크!