비트를 쪼개는 개발자

allen321@naver.com

Unity

Unity - 물리 엔진(RigidBody, Collider)

MozarTnT 2024. 7. 22. 21:18
728x90
반응형

 

 

 

 

 

Unity에서 처리해주는 물리 엔진의 주요 기능은 다음과 같다.

 

  • 오브젝트와 오브젝트간의 충돌 처리
  • 오브젝트의 중력 적용
  • 힘에 대한 가속 처리
  • 마찰력과 반발력에 따른 오브젝트 움직임 처리

 

 

 

 

또한 Unity의 물리 엔진들의 종류는 프로젝트에 따라 크게 두가지로 나뉜다.

 

 

 

1.  오브젝트 지향 프로젝트 

 

  • Nvidia PhysX 3D 물리엔진 : Unity에서 기본적으로 제공하는 3D 물리 엔진으로, Nvidia의 PhysX 엔진을 사용한다.

 

 

특징

 

  • 충돌 감지와 반응 및 시뮬레이션을 위한 여러 물리특성 지원
  • 다양한 플랫폼에서 사용이 가능함
  • 유니티 에디터에 통합되어 있어 사용이 간편함
  • 자주 사용하는 RigidBody와 Collider가 여기에 속해 있음

 

 

 

  • Box2D 물리 엔진 : 물리 시뮬레이션을 위해 Unity에서 제공하는 엔진이며 2D에 특화됨.

 

특징:

  • 경량화된 2D 물리 엔진
  • 2D 게임 개발에 최적화된 충돌 감지 및 반응
  • 단순한 API로 사용이 용이

 

 

 

2. 데이터 지향 프로젝트

 

  • Unity Physics 패키지 : 데이터 지향 기술 스택(DOTS)을 기반으로 하는 물리 엔진으로, ECS(Entity Component System)를 활용하여 대규모 물리 시뮬레이션에 최적화됨.

 

특징

  • 높은 성능과 확장성을 제공하는 데이터 지향 접근 방식
  • 대규모 월드와 복잡한 물리 시뮬레이션을 효과적으로 처리
  • 직관적인 ECS와 결합된 물리 시스템
  • DOTS 환경에서 작동하여 멀티스레딩과 최적화된 성능 제공

 

 

 

 

  • Unity Havok Physics : Unity와의 통합을 통해 제공되는 고성능 상용 물리 엔진이며  대규모 프로젝트에 특화됨.

 

특징:

  • 높은 성능과 정확성을 제공하는 상용 물리 엔진
  • 정교한 충돌 감지와 다양한 물리 효과 지원
  • 데이터 지향 접근 방식을 활용하여 최적화된 성능 제공
  • DOTS와 통합되어 있으며, 복잡한 물리 시뮬레이션을 효율적으로 처리

 

 


 

 

 

우리가 Unity로 게임을 개발할때 직관적으로 자주 사용하는 RigidBodyCollider 컴포넌트는 이 중 Nvidia PhysX 3D 물리엔진 에 속해있다.

 

 

 

RigidBodyCollider의 특징은 다음과 같다.

 

 

 

 

RigidBody

 

 

역할 : 물리적 특성을 오브젝트에 부여하여 힘, 중력, 속도 등을 통해 움직임을 관리할 수 있으며 시뮬레이션이 용이함.

 

 

기능

  • 중력(Gravity), 힘(Force), 토크(Torque) 등을 통해 객체를 움직임
  • 객체의 질량, 관성을 설정 가능
  • 물리적 상호작용을 통해 충돌 시 반응을 생성

 

 

 

 

Mass

: 오브젝트의 질량을 부여한다.

 

Drag : 오브젝트의 공기 저항을 부여한다.

 

AngularDrag : 오브젝트의 회전 저항 값

 

Automatic Center Of Mass : 값 체크시 중심을 자동으로 계산하여 균형을 잡음

 

Automatic Tensor : 값 체크시 자동으로 관성 모먼트를 계산함

 

Use Gravity : 값 체크시 중력을 부여함. 세부 세팅이 없을 시 지구의 중력 가속도인 9.8m/s2로 적용

 

Is Kinematic : 값 체크시 해당 오브젝트는 물리 시뮬레이션의 영향을 받지 않음. 스크립트로 별도로 이동을 관리해야함

 

Interpolate : 물리 시뮬레이션과 렌더링 프레임 간의 움직임을 부드럽게 하기 위해 사용함.

  • None : 보간*을 사용하지 않음
  • Interpolate: 이전 프레임의 Transform을 사용하여 보간
  • Extrapolate: 다음 프레임의 Transform을 예상하여 보간

Collision Detection : 충돌을 감지하고 처리 방식을 설정함.

 

  • Discrete : 기본 충돌 감지 방식, 프레임 사이의 빠른 객체 충돌 시 놓칠 수 있음
  • Continuous : 빠른 객체와의 충돌을 정확히 감지
  • Continuous Dynamic : 빠른 객체가 다른 Rigidbody와 충돌할 때 사용
  • Continuous Speculative : 더 정확한 충돌 감지를 위해 사용, 성능 저하 가능성 있음

 

Constraints : 객체의 특정 축을 고정하거나 회전을 제한함.

 

  • Freeze Position: 특정 축에 대한 이동을 고정
  • Freeze Rotation: 특정 축에 대한 회전을 고정

Layer Overrides : 레이어를 사용해 충돌처리를 포함하거나 제외할 수 있음

 

  • Include Layers: 충돌을 포함할 레이어를 설정
  • Exclude Layers: 충돌을 제외할 레이어를 설정

 

 

 

보간이란? : 보간(Interpolation)은 주어진 데이터 포인트들 사이의 값을 추정하는 방법을 의미

 

 

 

 

 

Collider

 

 

역할 : 객체의 경계를 정의하여 충돌 감지를 가능하게 함.

 

 

 

기능

  • 객체의 충돌을 감지하고 물리적 반응을 생성
  • 다양한 형태 (박스, 스피어, 캡슐, 메시 등)로 객체의 물리적 경계를 정의
  • 트리거 기능을 통해 물리적 반응 없이 충돌 이벤트만 발생 가능

 

 

 

 

 

 

Edit Collider : 버튼을 클릭 후 Scene 뷰에서 Collider의 모양과 크기를 편집할 수 있다..

 

Is Trigger : 값 체크시 Collider가 충돌을 감지하지만 물리적 반응은 발생하지 않는다. 대신 다른 객체가 이 Collider와 충돌할 때 이벤트가 발생한다.

 

Provides Contacts : 값 체크시 두 오브젝트가 충돌했을 때, 충돌 지점, vector등의 상세 정보를 얻을 수 있음.

 

Material : Physic Material을 할당할 수 있음, 마찰력과 반발력을 설정 가능.

 

Center : Collider의 중심점을 설정하고 Collider가 객체의 Transform을 기준으로 상대적인 위치를 가지게 함.

(Center 좌표가 X : 0, Y : 0, Z : 0 일때 Collider는 객체의 중심에 위치하게 됨.)

 

Size : Collider의 크기를 설정함.

 

Layer Overrides : 충돌 검사 후 특정 레이어인 경우 예외처리나 Collider의 충돌 반응을 제어함.

 

  • Layer Override Priority: 레이어 우선순위를 설정하여 다른 충돌 레이어 보다 우선 적용되도록 함.
  • Include Layers: 충돌을 포함할 레이어를 설정.
  • Exclude Layers: 충돌을 제외할 레이어를 설정.

 

 

728x90
반응형