물리 프로파일러 모듈은 물리 시스템이 프로젝트 씬에서 처리한 물리에 대한 정보를 표시합니다. 이 정보는 성능 문제나 프로젝트 씬에서 물리와 관련된 예기치 못한 불일치를 진단 및 해결하는 데 유용할 수 있습니다. 물리 디버그 시각화를 사용하여 애플리케이션에서 물리에 관한 문제를 추가로 디버그하고 파악할 수 있습니다.
물리 프로파일러 모듈 차트는 애플리케이션이 물리에 사용한 시간을 추적합니다. 타이밍은 서로 다른 차트 카테고리로 나뉩니다. 차트에서 카테고리 순서를 변경하려면 차트 범례에서 카테고리를 드래그하면 됩니다. 또한 카테고리의 컬러가 지정된 범례를 클릭하여 표시를 토글할 수 있습니다. 차트를 클릭하면 차트 아래의 모듈 세부 정보 창에서 각 차트 카테고리의 정확한 숫자 값을 볼 수 있습니다.
차트 | 기능 |
---|---|
Physics Used Memory | 물리 모듈이 사용한 총 메모리양입니다. |
Active Dynamic Bodies | 휴면 상태가 아닌 Rigidbody 컴포넌트와 ArticulationBody 컴포넌트의 수입니다. |
Active Kinematic Bodies | 활성화되어 있는 Kinematic Rigidbody 컴포넌트의 수입니다. 키네마틱 리지드바디는 MovePosition이나 MoveRotation이 프레임에서 호출되면 활성화되어 다음 프레임에서도 활성화된 상태로 남아있습니다. 참고: Unity는 프레임당 여러 번 조인트가 연결된 Kinematic Rigidbody 컴포넌트를 처리할 수도 있으며 이는 표시된 값에 영향을 미칩니다. |
Dynamic Bodies | Rigidbody 컴포넌트와 ArticulationBody 컴포넌트의 수입니다. |
Overlaps | 오버랩 이벤트 수입니다. 오버랩 이벤트는 콜라이더가 서로 겹치는 경우를 의미합니다. |
Trigger Overlaps | 트리거 콜라이더가 있는 오버랩 이벤트 수입니다(2개씩 계산). |
Discreet Overlaps | Unity가 분리 충돌 검사를 사용하여 해결한 오버랩 이벤트 수입니다. |
Continuous Overlaps | Unity가 연속 충돌 검사를 사용하여 해결한 오버랩 이벤트 수입니다. |
Physics Queries | 레이캐스트 및 셰이프캐스트와 같은 총 물리 쿼리양입니다. |
물리 프로파일러 모듈을 클릭하면 모듈 세부 정보 창에 프로젝트 씬의 물리에 대한 추가 정보가 표시됩니다.
통계 | 설명 | |
---|---|---|
Physics Used Memory | 물리 모듈이 사용한 총 메모리양입니다. | |
Dynamic Bodies | Rigidbody 컴포넌트와 ArticulationBody 컴포넌트의 수입니다. | |
Articulation Bodies | 씬의 ArticulationBody 컴포넌트 수입니다. | |
Active Dynamic Bodies | 휴면 상태가 아닌 Rigidbody 컴포넌트와 ArticulationBody 컴포넌트의 수입니다. | |
Active Kinematic Bodies | 활성화되어 있는 Kinematic Rigidbody 컴포넌트의 수입니다. 키네마틱 리지드바디는 MovePosition이나 MoveRotation이 프레임에서 호출되면 활성화되어 다음 프레임에서도 활성화된 상태로 남아있습니다. 참고: Unity는 프레임당 여러 번 조인트가 연결된 Kinematic Rigidbody 컴포넌트를 처리할 수도 있으며 이는 표시된 값에 영향을 미칩니다. |
|
Static Colliders | Rigidbody 컴포넌트 또는 ArticulationBody 컴포넌트가 없는 콜라이더의 수입니다. | |
Colliders Synced | 트랜스폼과 동기화된 콜라이더양입니다. | |
Rigidbodies Synced | 트랜스폼과 동기화된 Rigidbody 컴포넌트양입니다. | |
Physics Queries | 레이캐스트 및 셰이프캐스트와 같은 총 물리 쿼리양입니다. | |
Total Overlaps | 오버랩 이벤트 수입니다. 오버랩 이벤트는 콜라이더가 서로 겹치는 경우를 의미합니다. | |
불연속 | Unity가 분리 충돌 검사를 사용하여 해결한 오버랩 이벤트 수입니다. | |
연속 | Unity가 연속 충돌 검사를 사용하여 해결한 오버랩 이벤트 수입니다. | |
트리거 | 트리거 콜라이더가 있는 오버랩 이벤트 수입니다(2개씩 계산). | |
수정 | Unity가 Contact Modification API를 사용하여 수정한 오버랩 이벤트 수입니다. | |
Broadphase Adds/Removes | Broadphase Algorithm이 추가하거나 제거한 총 콜라이더 수입니다. | |
Narrowphase Touches | 이전 프레임 이후 새로 손실되거나 사라진 총 충돌 이벤트양입니다. |
물리 프로파일러 모듈은 휴면 상태인 Rigidbody 컴포넌트 수를 표시하지 않습니다. 이런 컴포넌트는 물리 시스템과 상호작용하지 않으므로 프로파일러에서 처리되지 않습니다. 휴면 상태인 Rigidbody 컴포넌트에 대한 자세한 내용은 리지드바디에 있는 문서를 참조하십시오.
물리 시뮬레이션은 메인 로직의 업데이트 루프와 다른 별도의 일정한 업데이트 주기로 실행되고 호출마다 Time.fixedDeltaTime을 통해서만 시간을 앞당길 수 있습니다. 이 차이는 Update와 FixedUpdate의 차이와 비슷합니다. 이에 대한 자세한 내용은 시간 창 문서를 참조하십시오.
시간이 오래 걸리는 무거운 로직 또는 그래픽스 프레임이 발생하면 프로파일러에서 물리 시뮬레이션을 프레임마다 여러 번 호출해야 합니다. 따라서 이미 리소스를 많이 사용하는 프레임에 더욱 많은 시간과 리소스가 필요하기 때문에 물리 시뮬레이션이 프로젝트 설정 창(메뉴: Edit > Project Settings > Time)에서 설정할 수 있는 Maximum Allowed Timestep 값에 따라 일시적으로 중단될 수 있습니다.
프로젝트에서 이러한 상황을 감지하려면 CPU 사용 프로파일러 모듈을 선택하고 계층 구조 뷰의 Overview 섹션에서 Physics.Processing 또는 Physics.Simulate 에 대한 호출 수를 확인하십시오.
위 그림의 예에서 Calls 열의 값 2는 마지막 논리 프레임 중에 물리 시뮬레이션이 두 번 호출되었음을 나타냅니다.
호출 카운트가 10에 가까우면 문제가 있음을 의미합니다. 문제를 해결하려면 먼저 물리 시뮬레이션 빈도를 줄이십시오. 문제가 계속되면 물리 시스템이 게임 타임에 보조를 맞추기 위해 많은 시뮬레이션 호출을 사용하기 직전에 무거운 프레임을 초래할 수 있는 원인을 확인해야 합니다. 때로는 무거운 그래픽스 프레임으로 인해 나중에 씬에서 물리 시뮬레이션이 더 많이 호출될 수 있습니다.
씬의 물리 시뮬레이션에 대한 자세한 내용은 모듈 세부 정보 창의 상단에 있는 검색 상자를 선택하여 Physics.Processing 을 검색한 다음 창 오른쪽 상단에 있는 드롭다운에서 Calls 를 선택합니다. 이렇게 하면 씬을 업데이트하기 위해 실행되는 물리 시스템 작업 이름이 표시됩니다. 가장 많이 표시되는 이름 두 가지는 다음과 같습니다.
물리 프로파일러 모듈의 이전 버전을 확인하려면 Legacy 모드를 전환합니다. 이는 Unity 이전 버전에서 기본 모듈이었습니다. 이전 버전을 확인하려면 물리 프로파일러 모듈의 세부 정보 창의 오른쪽 상단에 있는 드롭다운에서 Legacy를 선택합니다.
이 모드에서는 Unity 이전 버전으로 저장된 프로파일러 데이터를 로드하고 확인할 수 있습니다. 캡처된 데이터를 Unity 최신 버전에서 확인하기 위해 이 모드로 전환하면 표시된 데이터의 신뢰도와 정확도가 떨어집니다. 새로운 물리 프로파일러 데이터를 확인하려면 반드시 Current 모드를 사용해야 합니다.
통계 | 설명 |
---|---|
Active Dynamic | 활성 상태의 비 Kinematic Rigidbody 컴포넌트 수입니다. 활성 리지드바디는 휴면 상태가 아닙니다. |
Active Kinematic | 활성화되어 있는 Kinematic Rigidbody 컴포넌트의 수입니다. 키네마틱 리지드바디는 MovePosition이나 MoveRotation이 프레임에서 호출되면 활성화되어 다음 프레임에서도 활성화된 상태로 남아있습니다. 참고: Unity는 프레임당 여러 번 조인트가 연결된 Kinematic Rigidbody 컴포넌트를 처리할 수도 있으며 이는 표시된 값에 영향을 미칩니다. |
Static Colliders | 게임 오브젝트 또는 부모 게임 오브젝트에 Rigidbody 컴포넌트가 연결되지 않은 게임 오브젝트의 Collider 컴포넌트 수입니다. Rigidbody 컴포넌트가 있는 게임 오브젝트나 부모 게임 오브젝트의 Collider 컴포넌트는 정적 콜라이더로 집계되지 않습니다. 이런 콜라이더는 복합 콜라이더라고 합니다. 복합 콜라이더는 모든 콜라이더를 Rigidbody 컴포넌트와 동일한 게임 오브젝트에 포함시키지 않고 바디의 여러 콜라이더를 편리한 방법으로 배열합니다. |
Rigidbody | 컴포넌트의 휴면 상태에 관계없이 물리 시스템으로 처리된 Rigidbody 컴포넌트 수입니다. |
Trigger Overlaps | 오버래핑 트리거 수입니다(페어 수). |
Active Constraints | 물리 시스템이 처리한 기본 제약의 수입니다. 제약은 조인트의 빌딩 블록과 충돌 리스폰스로 사용됩니다. 예를 들어 ConfigurableJoint의 선형 또는 회전 자유도를 제한하려면 각 제한마다 기본 제약이 필요합니다. |
Contacts | 씬의 모든 콜라이더 간 총 접점 페어 수입니다. 트리거 오버랩 페어의 양도 포함됩니다. 접점은 접촉하거나 겹치는 콜라이더 페어입니다. 참고: Unity는 콜라이더 페어의 간격이 사용자가 설정할 수 있는 특정 제한보다 작아진 후에 콜라이더 페어마다 접점 페어를 생성합니다. 따라서 아직 접촉하거나 겹치지 않는 Rigidbody 컴포넌트에 대해 생성된 접점을 확인할 수도 있습니다. 자세한 내용은 Collider.contactOffset 및 ContactPoint.separation을 참조하십시오. |