TIL 38

qkrrlcks00·2024년 10월 18일

Layer Collision Matrix

오브젝트끼리 충돌하지 않게 하는법이다

Edit - Project Setting에 들어가면

Physics 2D에서 한눈에 봐도 설정할수 있게 되어있다. 체크되있으면 서로 작용한다는거고 체크가 풀려있으면 무시한다.
layer를 설정해놔야 이항목에서 확인할수잇다

Rigidbody

Mass : 오브젝트의 질량 (Default 단위는 Kg)
Drag : 오브젝트가 Forses에 의해 움직일때 공기저항이 영향을 미치는 정도
Angular Drag : 오브젝트가 토크로 회전할 때 공기저항이 영향을 미치는 정도
Use Gravity : 활성화 상태면 오브젝트는 중력의 영향을 받는다.
Is Kinematic : 활성화 상태면 오브젝트는 물리 엔진으로 영향을 받지 않고 오로지 Transform으로만 조작된다.
Interpolate : RigidBody의 움직임을 부럽게 만들어준다.

  • None : 보간이 적용되지 않는다.
  • Interpolate : 이전 프레임의 트랜스폼에 맞게 움직임을 부드럽게 처리한다.
  • EXtrapolate : 다음 프레임의 트랜스폼을 추청해 움직임을 부드럽게 처리한다.

Collision Detection : 빠르게 움직이는 오브젝트가 충돌감지없이 다른 오브젝트를 지나쳐 가는것을 방지한다.

Coliistion Detection

Discrte : 씬에서 다른 모든 Collider에 대해 불연속 충돌검사를 사용한다.
기본값이며 CPU를 가장 적게 사용하는 옵션이다
물리엔진은 각 물리 시간 단계가 끝날 때만 충돌을 확인하여 빠르게 움직이는 물체가 충돌을 감지하지 않고 다른 물체를 통과하는 "터널링" 이라는 버그가 발생할수 있다.

Continuos : 동적 콜라이더에 불연속 충돌 검사 정적 콜라이더에 스위핑 기반 연속 충돌검사를 사용한다.
CPU를 더 사용하지만 "터널링" 현상을 방지할수 있다.
물리 엔진은 마지막 물리스텝에서 다음 타임스텍까지 미리 예측하고 해당 시간동안 객체가 무엇과 충돌하는지 확인한다.
그러나 정적 콜라이더에 대해서만 확인한다.

Continuous Dyamic : Continous와 비슷하지만 다른 Continuous Dyamic으로 설정된 다른 동적(움직이는) 콜라이더와의 충돌도 확인합니다. CPU를 가장 많이 사용한다.

Continous Speculative : 연속 동적과 유사한 수준의 정확도를 제공하지만
CPU 비용은 더 낮은 충돌 감지 예측적 접근 방식을 사용한다. 모든 객체가 현재 방향으로 계속 이동한다고 가정하고 이를 기반으로 잠재적인 충돌을 계산한다.

동적 콜라이더

  • GameObject에 RigidBody Component가 있으면 해당 오브젝트의 콜라이더를 동적 콜라이더라고 부른다.

정적 콜라이더

  • GameObject에 RigidBody Component가 없으면 해당 오브젝트의 콜라이더를 정적 콜라이더라고 부른다.
    동적 콜라이더와 정적 콜라이더끼리 상호작용은 가능하지만, 정적 콜라이더는 RigidBody Component가 없으므로 충돌에 대한 반응은 없다. (EX:땅)

Collider의 Property중 Is Trigger를 체크하면 해당 GameObject는 충돌현상은 일으키지 않지만 감지는 하게 된다.

트리거

  • 충돌하는 두 오브젝트가 물리적 충돌현상은 일으키지 않고 서로 통과하지만 충돌 자체는 감지하는 것.
    보통 센서 역할로 많이 사용한다.

충돌 콜백 함수

  • void OnCollisionEnter : 충돌이 시작했을 때

  • void OnCollisionStay : 충돌이 지속될 때

  • void OnCollisionExit : 충돌이 끝났을 때

  • void OnTriggerEnter : 충돌이 시작했을 때

  • void OnTriggerStay : 충돌이 지속될 때

  • void OnTriggerExit : 충돌이 끝났을 때

ForceMode2D

AddForce : (방향*힘 값, 힘의 종류)

rigid.AddForce(transform.right*speed, ForceMode2D.Force)
: 연속 + 질량무시 X 현실적인 물리현상을 나타낼때 많이 쓰임

rigid.AddForce(transform.right*speed, ForceMode2D.Impulse)
: 불연속 + 질량무시 X 짧은 순간의 힘, 충돌이나 폭발과 같은 것에 많이 쓰임

rigid.AddForce(transform.right*speed, ForceMode.VelocityChange)
: 불연속 + 질량무시 O 질량에 관계없이 속도를 바꿈

rigid.AddForce(transform.right*speed, ForceMode.Acceleration)
: 연속 + 질량무시 O 질량과 관계없이 가속, 오브젝트의 질량에 관계없이 가속을 주고싶을 때 사용

0개의 댓글