Physics - 물리학
Unity는 프로젝트에서 물리를 시뮬레이션하여 객체가 올바르게 가속되고 충돌에 응답하도록 합니다. 중력 및 기타 다양한 힘. Unity는 3D, 2D, 객체 지향 또는 데이터 지향 등 프로젝트 요구에 따라 사용할 수 있는 다양한 물리 엔진 구현을 제공합니다.
Built-in 3D Physics
유니티에는 엔비디아(Nvidia)사의 피직스(PhysX)엔진이 내부에 탑재가 되어 있어서 이를 토대로 다양한 컴포넌트들을 이용 물리 효과를 줄 수 있게 하였다.
Character control | first-person와 third-person characters를 위한 물리 기반 캐릭터 제어 구성 |
Rigidbody physics | GameObjects에 물리 기반 동작 적용 |
Collision |
콜라이더를 사용하여 GameObject 간의 충돌을 구성합니다. |
Joints |
게임 오브젝트를 연결하고 피벗, 이동 및 제한을 위한 물리적 힘을 시뮬레이션하는 조인트를 적용 및 구성합니다. |
Articulations | 강체와 관절의 복잡한 시스템을 구성합니다. |
Ragdoll physics | 캐릭터에 대한 래그돌 물리학을 구성합니다. |
Cloth |
캐릭터 의류 및 기타 인앱 직물의 직물 움직임을 시뮬레이션합니다. |
Multi-scene physics | 여러 전용 물리 장면이 있는 하나의 프로젝트에서 다양한 물리 컨텍스트를 관리합니다. |
Physics Reference 2D
2D 물리 엔진으로는 유명한 Box2D 엔진이 탑재가 되어 있다. 다음 같은 2D 컴포넌트들이 있다.
Rigidbody 2D | 리지드바디 2D의 작동 방식을 알아보세요. |
Collider 2D | Rigidbody 2D와 함께 사용할 수 있는 Collider 2D 구성 요소의 유형을 이해합니다. |
Physics Material 2D |
충돌하는 2D 물리 개체 사이의 마찰과 바운스를 제어합니다. |
2D Joints | 2D 게임 오브젝트와 함께 사용할 수 있는 2D 조인트 유형을 이해합니다. |
Constant Force 2D | 리지드바디 2D에 일정한 힘을 추가합니다. |
Effectors 2D | GameObject 충돌체가 접촉할 때 물리력을 지시합니다. |
Physics 설정(메인 메뉴: Edit > Project Settings 에서 Physics 카테고리 선택 ) 을 사용하여 3D 물리에 대한 전역 설정을 적용합니다.
참고: 2D 물리에 대한 전역 설정을 관리하려면 Physics 2D 설정을 대신 사용하십시오.
3D 물리 설정
이러한 설정은 물리적 시뮬레이션의 정확도에 대한 제한을 정의합니다. 일반적으로 더 정확한 시뮬레이션에는 더 많은 처리 오버헤드가 필요하므로 이러한 설정은 정확도와 성능을 절충할 수 있는 방법을 제공합니다. 자세한 내용은 매뉴얼의 물리학 섹션을 참조하십시오.
재산 | 기능 |
중력 | Gravity: Rigidbody 구성 요소 에 적용되는 중력의 양을 설정합니다 . 사실적인 중력 설정을 위해 y축에 음수를 적용합니다. 중력은 제곱초당 세계 단위로 정의됩니다. 참고 : 중력을 높이면 안정적인 접촉을 유지하기 위해 기본 솔버 반복 값도 늘려야 할 수 있습니다. |
기본 재료 | Default Material: Collider에 할당된 것이 없는 경우 사용할 기본 Physics Material에 대한 참조를 설정합니다 . |
바운스 임계값 | Bounce Threshold: 속도 값을 설정합니다. 충돌하는 두 개체의 상대 속도가 이 값보다 낮으면 서로 튕기지 않습니다. 이 값은 또한 지터를 감소시키므로 매우 낮은 값으로 설정하지 않는 것이 좋습니다. |
기본 최대 침투 속도 | Default Max Depenetration Velocity: 침투 속도의 기본값을 정의합니다 (솔버가 다른 바디와 겹치지 않도록 바디를 당기는 동안 바디에 설정할 수 있는 속도). |
수면 임계값 | Sleep Threshold : 비운동학적 리지드바디 (즉, 물리 시스템에 의해 제어되지 않는 리지드바디)가 잠들 수 있는 전역 에너지 임계값을 설정합니다. Rigidbody 가 잠자고 있을 때 매 프레임마다 업데이트되지 않으므로 리소스를 덜 사용합니다. Rigidbody의 운동 에너지를 질량으로 나눈 값이 이 임계값 미만 이면 수면 후보입니다. |
기본 접촉 오프셋 | Default Contact Offset : 충돌 감지 시스템이 충돌 접촉을 생성하는 데 사용하는 거리를 설정합니다 . 값은 양수여야 하며 0에 너무 가깝게 설정하면 지터가 발생할 수 있습니다. 기본적으로 0.01로 설정됩니다. Collider는 거리가 접촉 오프셋 값의 합보다 작은 경우에만 충돌 접촉을 생성합니다. |
기본 솔버 반복 Default Solver Iterations | 모든 물리 프레임에서 Unity가 실행하는 솔버 프로세스 수를 정의합니다 . 솔버는 관절의 움직임 또는 겹치는 Rigidbody 구성 요소 간의 접촉 관리와 같은 여러 물리적 상호 작용을 결정하는 작은 물리 엔진 작업입니다 . 이것은 솔버 출력의 품질에 영향을 미치며 기본값이 아닌 Time.fixedDeltaTime이 사용되거나 구성이 추가로 요구되는 경우 속성을 변경하는 것이 좋습니다 . 일반적으로 관절이나 접촉으로 인한 지터를 줄이는 데 사용됩니다. |
기본 솔버 속도 반복 | Default Solver Velocity Iterations : 솔버가 각 물리 프레임에서 수행하는 속도 프로세스 수를 설정합니다 . 솔버가 수행하는 프로세스가 많을수록 리지드바디 바운스 후 결과 출구 속도의 정확도가 높아집니다. 접합된 Rigidbody 구성 요소 또는 Ragdoll이 충돌 후 너무 많이 움직이는 문제가 발생하면 이 값을 늘려 보십시오. |
쿼리 적중 뒷면 | Queries Hit Backfaces : 물리 쿼리(예: Physics.Raycast )가 MeshColliders 의 후면 삼각형 이 있는 적중을 감지하려면 이 옵션을 활성화합니다 . 기본적으로 이 설정은 비활성화되어 있습니다. |
쿼리 적중 트리거 | Queries Hit Triggers : 물리 히트 테스트(예: Raycasts , SphereCasts 및 SphereTests )가 Trigger로 표시된 Collider와 교차할 때 히트를 반환하도록 하려면 이 옵션을 활성화합니다. 개별 레이캐스트는 이 동작을 재정의할 수 있습니다. 기본적으로 이 설정은 활성화되어 있습니다. |
어댑티브 포스 활성화 | Enable Adaptive Force : 적응형 힘을 활성화하려면 이 옵션을 활성화합니다. 적응형 힘은 물체 더미나 스택을 통해 힘이 전달되는 방식에 영향을 주어 보다 사실적인 동작을 제공합니다 . 기본적으로 이 설정은 비활성화되어 있습니다. |
연락처 생성 | Contacts Generation : 연락처 생성 방법을 선택합니다. |
레거시 연락처 생성 | Unity 5.5 이전에 Unity는 축 분리 정리( SAT . PCM이 더 효율적이지만 이전 프로젝트의 경우 물리학을 약간 다시 조정할 필요가 없도록 SAT를 계속 사용하는 것이 더 쉬울 수 있습니다 . PCM은 결과를 초래할 수 있습니다. (즉, OnCollisionEnter , OnCollisionStay 및 OnCollisionExit 에 전달된 Collision 인스턴스에서 얻은 배열 ) 업그레이드 조언 : Unity 2018.2로 만든 프로젝트를 마이그레이션하려면 또는 더 낮으면 매니폴드에서 패치를 병합하고 연락처를 선택하는 코드와 함께 작동하도록 스크립트를 업데이트해야 할 수 있습니다. |
영구 접점 매니폴드(PCM) | Persistent Contacts Manifold (PCM) : 매 물리 프레임마다 더 적은 수의 접촉을 생성하고 더 많은 접촉 데이터가 프레임 간에 공유됩니다. PCM 접촉 생성 경로도 더 정확하며 일반적으로 대부분의 경우 더 나은 충돌 피드백을 생성합니다. 자세한 내용은 Persistent Contact Manifold에 대한 Nvidia 설명서를 참조하십시오 . 이것이 기본값입니다. |
자동 시뮬레이션 | 물리 시뮬레이션을 자동으로 실행하거나 이에 대한 명시적 제어를 허용하려면 이 옵션을 활성화합니다. |
자동 동기화 변환 | Transform 구성 요소가 변경될 때마다 물리 시스템과 변환 변경 사항을 자동으로 동기화하려면 이 옵션을 활성화하십시오 . 기본적으로 이 설정은 비활성화되어 있습니다. |
연락처 쌍 모드 | Contact Pairs Mode : 사용할 접점 쌍 생성 유형을 선택하십시오. |
기본 연락처 쌍 | kinematic-kinematic 및 kinematic-static 쌍을 제외한 모든 접촉 쌍에서 충돌 및 트리거 이벤트를 수신합니다. |
운동학 쌍 활성화 | Enable Kinematic Kinematic Pairs : 운동학적-운동학적 접촉 쌍에서 충돌 및 트리거 이벤트를 수신합니다. |
운동학적 정적 쌍 활성화 | Enable Kinematic Static Pairs : 운동학-정적 접촉 쌍에서 충돌 및 트리거 이벤트를 수신합니다. |
모든 연락처 쌍 활성화 | Enable All Contact Pairs : 모든 연락처 쌍에서 충돌 및 트리거 이벤트를 수신합니다. |
광상 유형 | Broadphase Type : 물리 시뮬레이션에서 사용할 광역 위상 알고리즘을 선택합니다 . PhysX SDK 및 Rigid Body Collision 에 대한 NVIDIA 문서를 참조하십시오 . |
브로드페이즈 스윕 및 가지치기 | Sweep and Prune Broadphase : 스윕 앤 프룬(sweep-and-prune) 광역 위상 충돌 방법(즉, 멀리 떨어져 있는 쌍을 확인해야 하는 것을 배제하기 위해 단일 축을 따라 객체를 정렬)을 사용합니다. |
멀티박스 프루닝 Broadphase | Multibox Pruning Broadphase: Multi-box pruning은 그리드를 사용하며 각 그리드 셀은 스위프&프루닝을 수행합니다. 예를 들어 평평한 세계에 많은 게임 오브젝트가 있는 경우 일반적으로 성능을 향상시키는 데 도움이 됩니다 . |
자동 상자 가지치기 | 세계 경계와 분할 수를 자동으로 계산할 수 있다는 점을 제외하면 Multibox Pruning 과 유사합니다 . 그리드 셀 세트를 유지하고 정기적인 스윕 앤 프룬 접근 방식을 사용하여 잠재적으로 겹칠 수 있는 충돌체 쌍을 해결합니다. 일반적 으로 단일 Sweep 및 Prune이 많은 추가 오탐지를 생성하는 큰 장면 에 도움이 됩니다 . |
세계 경계 | World Bounds : Multibox Pruning Broadphase 알고리즘 을 사용할 때 멀리 떨어져 있는 개체가 서로 영향을 주지 않도록 세계를 둘러싸는 2D 그리드를 정의합니다 . 이 옵션은 Broadphase Type을 Multibox Pruning Broadphase 로 설정한 경우에만 사용됩니다 . |
월드 세분화 | World Subdivisions : 2D 그리드 알고리즘에서 x축과 z축을 따라 있는 셀의 수입니다. 이 옵션은 Broadphase Type을 Multibox Pruning Broadphase 로 설정한 경우에만 사용됩니다 . |
마찰 유형 | Friction Type : 시뮬레이션에 사용되는 마찰 알고리즘을 선택합니다. |
패치 마찰 유형 | Patch Friction Type : 일반적으로 낮은 솔버 반복 횟수에서 가장 안정적인 결과로 이어지는 기본적인 강력한 마찰 알고리즘입니다. 이 방법은 접촉하는 객체 쌍당 최대 4개의 스칼라 솔버 제약 조건만 사용합니다. |
한 방향 마찰 유형 | Coulomb 마찰 모델의 단순화로, 주어진 접촉점에 대한 마찰이 접촉 법선의 교차하는 접선 방향으로 적용 됩니다 . 이를 위해서는 패치 마찰보다 더 많은 솔버 반복이 필요하지만 2방향 모델만큼 정확하지는 않습니다. 관절 바디가 이 마찰 유형과 함께 작동하도록 하려면 솔버 유형을 Temporal Gauss Seidel 로 설정하십시오 . |
두 방향 마찰 유형 | 단방향 모델과 같지만 두 접선 방향으로 동시에 마찰을 적용합니다. 이렇게 하려면 더 많은 솔버 반복이 필요하지만 더 정확합니다. 모든 접점에 적용되기 때문에 접점이 많은 시나리오의 경우 패치 마찰보다 비용이 많이 듭니다. 관절 바디가 이 마찰 유형과 함께 작동하도록 하려면 솔버 유형을 Temporal Gauss Seidel 로 설정하십시오 . |
향상된 결정성 활성화 | 게임이 결정론적 순서로 액터를 삽입한다면 장면의 시뮬레이션은 액터가 존재하는지에 관계없이 일관됩니다. 이 모드는 이러한 추가 결정성을 보장하기 위해 일부 성능을 희생합니다. |
통합 하이트맵 활성화 | Enable Unified Heightmaps : 메시 충돌 과 동일한 방식으로 지형 충돌을 처리하려면 이 옵션을 활성화합니다 . |
솔버 유형 | Solver Type : 시뮬레이션에 사용할 PhysX 솔버 유형을 선택합니다. |
투영된 가우스 자이델 | Projected Gauss Seidel : 기본 PhysX 솔버입니다. |
시간적 가우스 자이델 | Temporal Gauss Seidel : 조인트 의 저항을 향상시킵니다 . 일반적으로 기본 솔버로 시뮬레이션하는 동안 일부 비정상적인 동작이 발생할 때 도움이 됩니다. |
레이어 충돌 매트릭스 | Layer Collision Matrix : 레이어 기반 충돌 감지 시스템의 작동 방식을 정의합니다 . Collision Matrix에서 레이어를 확인하여 다른 레이어와 상호 작용하는 레이어를 선택합니다. |
Cloth Inter-Collision : 옷감 상호 충돌 | |
거리 | 상호 충돌하는 각 Cloth 파티클 주위의 구형 직경을 정의합니다 . Unity는 이러한 구체가 시뮬레이션 중에 겹치지 않도록 합니다. 거리는 구성에서 두 입자 사이의 최소 거리보다 작아야 합니다. 거리가 더 크면 옷감 충돌이 일부 거리 제한을 위반하여 지터링이 발생할 수 있습니다. |
단단함 | 상호 충돌하는 천 파티클 사이의 분리 임펄스의 강도 HYPERLINK "https://docs.unity3d.com/2021.3/Documentation/Manual/class-Cloth.html" \l "intercollision" 입니다. 천 솔버는 이것을 계산하고 파티클을 분리된 상태로 유지하기에 충분해야 합니다. |
'유니티게임강좌 > 총 발사 로직' 카테고리의 다른 글
[총발사로직] 충돌 이벤트 (0) | 2023.02.27 |
---|---|
[총발사로직] Collider 컴포넌트 (0) | 2023.02.27 |
[총발사로직] Bullet Script - AddForce, AddRelativeForce (0) | 2023.02.27 |
[총발사로직]Rigidbody 컴포넌트 (0) | 2023.02.26 |
[총발사로직] 총알 모델 준비 (0) | 2023.02.26 |