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로 게임을 개발할때 직관적으로 자주 사용하는 RigidBody와 Collider 컴포넌트는 이 중 Nvidia PhysX 3D 물리엔진 에 속해있다.
RigidBody와 Collider의 특징은 다음과 같다.
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: 충돌을 제외할 레이어를 설정.
'Unity' 카테고리의 다른 글
Unity [디자인 패턴] - 싱글톤 패턴 (0) | 2024.08.07 |
---|---|
Unity [디자인 패턴] - 디자인 패턴이란? (0) | 2024.08.07 |
Unity [디자인 패턴] - 오브젝트 풀링 패턴 (0) | 2024.04.30 |
Unity에서 DB를 활용해 로그인, 회원가입 시스템 구현해보기 (2) (1) | 2024.04.26 |
Unity에서 DB를 활용해 로그인, 회원가입 시스템 구현해보기 (1) (0) | 2024.04.22 |