Unity 물리 충돌

램해·2025년 4월 17일
0

지난 번에는 위치 이동인 Transform에 대하여 알아보았다. 이번에는 게임에서 좀 더 구체적인 물리적 힘을 주기 위해서 충돌에 관해서 알아보겠다.

Rigidbody

Rigidbody는 오브젝트에게 물리 엔진을 부여하는 것이다. 힘(Force)과 속도(Velocity)의 영향을 받기에 벡터의 힘이 더해지는 것으로 볼 수 있다.

Addforce

직역과 똑같이 힘을 더해준다는 뜻이다. 주로 오브젝트를 발사할 때 자주 쓰인다. AddForce에는 ForceMode를 사용하는데 4가지 종류를 알아보자.

Force(기본값) - 질량을 고려한 지속적인 힘
Impulse - 질량을 고려한 순간적인 힘
VelocityChange - 질량을 무시하고 즉시 속도를 변환한다.
Acceleration - 질량을 무시하고 지속적인 힘을 준다.

예시

Rigidbody rigid = GetComponent<Rigidbody>();
rigid.AddForce(transform.forward * 10f, ForceMode.Impulse);
// 10f = 힘의 크기
// Impulse = 순간적인 힘

Kinematic Rigidbody

물리엔진의 영향을 받지 않지만 다른 물리 오브젝트에 영향을 줄 수 있는 Rigidbody이다. 중력을 받지 않고 AddForce의 영향아래 움직이지 않는다.

Collider

오브젝트끼리 충돌을 감지하는 상호작용을 한다. Rigidbody와 함께 사용했을 때 물리반응이 발생해서 주로 오브젝트끼리의 충돌, 벽 등에 이용된다. 종류에는 Box, Sphere, Capsul, Mesh 등 오브젝트의 형상에 맞는 Collider를 써주면 된다.

정적, 동적 Collider

Rigidbody를 갖고 있지 않는 Collider를 정적 콜라이더라고 하고
Rigidbody를 갖고 있는 Collider를 동적 콜라이더라고 한다.

Collision

Collider를 가진 두 오브젝트끼리 부딪힐 경우 상호작용을 한다. 오브젝트 중 하나는 반드시 Rididbody를 가지고 있어야 한다. 두 오브젝트가 충돌시 OncollisionEnter(충돌시), OncollisionStay(충돌중), oncollisionExit(충돌 끝남)가 발생한다.

예를 들어서 볼링을 한다고 생각해보자 볼링공을 굴리고 핀에 맞춘 즉시 OncollisionEnter이 발생해서 물리력이 생기고 맞은 공과 핀은 맞닿아 있기에 OncollisionStay가 발생한다. 그리고 물리력에 의해 핀이 날아가서 공과 멀어지면 OncollisionExit가 된다.

Trigger

오브젝트끼리 충돌을 했고, Collider과, Rigidbody를 갖고 있지만, 물리력이 발생하지 않고 관통하게 할 수 있는 역할이다. Trigger도 똑같이 OncollisionEnter, OncollisionStay, oncollisionExit 이 발생하지만 물리력이 발생하지 않기에 통과하는중에 OnCollisionStay가 발생한다. 주로 벽이 있지만 히든 벽이라던가, 체크포인트 이벤트 발생에 쓰인다.

Trigger과 Kinematic

앞서 설명한 두 메소드가 똑같은거 아닌가? 라는 의문이 든다. 하지만 Kinematic은 Rigidbody이고 Trigger은 Collsion이기에 다음과 같은 차이가있다.
Kinematic은 중력을 무시하고 게임내의 이동이 가능하고, Trigger는 중력이 상관없고 게임내의 이동이 불가능하다.

레이캐스트

게임을 하면서 엑스트라들이 플레이어를 발견하면 갑자기 공격하는 경험이 있을 것이다. 여기서 레이캐스트가 사용되는데 레이캐스트는 설정해둔 직선의 Range에 의하여 원하는 오브젝트를 탐지해내는 역할이다. 주로 시야 감지에 쓰인다.

예제

Physics.Raycast(Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance);

0개의 댓글