Version: 2020.2
Memory Profiler module
2D 물리 프로파일러 모듈

물리 프로파일러 모듈

물리 프로파일러 모듈은 씬에서 물리 엔진이 처리한 물리에 대한 정보를 표시합니다. 이 정보는 성능 문제나 씬의 물리와 관련된 예기치 못한 불일치를 진단 및 해결하는 데 유용할 수 있습니다. 애플리케이션의 물리 디버깅에 대한 자세한 내용은 물리 디버그 시각화 문서를 참조하십시오.

물리 프로파일러 모듈
물리 프로파일러 모듈

차트 카테고리 및 모듈 세부 정보 창

물리 프로파일러 모듈의 차트는 애플리케이션이 물리에 소비하는 시간을 추적합니다. 타이밍은 7개 카테고리로 나뉩니다. 차트의 카테고리 순서를 변경하려면 차트 범례에 카테고리를 끌어다 놓으십시오. 카테고리의 컬러 범례를 클릭하여 표시 여부를 토글할 수도 있습니다.

차트를 클릭하면 차트 아래의 모듈 세부 정보 창에서 각 차트 카테고리의 정확한 숫자 값을 확인할 수 있습니다.

차트 기능
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.contactOffsetContactPoint.separation 문서를 참조하십시오.

프로파일러에 표시되는 숫자는 씬에서 물리 컴포넌트가 있는 게임 오브젝트의 정확한 수와 일치하지 않을 수 있습니다. 이는 Unity가 일부 물리 컴포넌트에 영향을 미치는 다른 컴포넌트(예: 조인트 컴포넌트)에 따라 물리 컴포넌트를 다른 속도로 처리할 수 있기 때문입니다. 특정 물리 컴포넌트가 연결된 게임 오브젝트 수를 정확하게 계산하려면 FindObjectsOfType 함수를 사용해 커스텀 스크립트를 작성해야 합니다.

물리 프로파일러 모듈에는 휴면 상태인 Rigidbody 컴포넌트 수가 표시되지 않습니다. 이런 컴포넌트는 물리 엔진과 상호작용하지 않으므로 프로파일러에서 처리되지 않습니다. 휴면 상태인 Rigidbody 컴포넌트에 대한 자세한 내용은 리지드바디 문서를 참조하십시오.

물리 프로파일러를 사용하여 성능 문제 파악

물리 시뮬레이션은 메인 로직의 업데이트 루프와 다른 별도의 일정한 업데이트 주기로 실행되고 호출마다 Time.fixedDeltaTime을 통해서만 시간을 앞당길 수 있습니다. 이 차이는 UpdateFixedUpdate의 차이와 비슷합니다. 이에 대한 자세한 내용은 시간 창 문서를 참조하십시오.

시간이 오래 걸리는 무거운 로직 또는 그래픽스 프레임이 발생하면 프로파일러에서 물리 시뮬레이션을 프레임마다 여러 번 호출해야 합니다. 따라서 이미 리소스를 많이 사용하는 프레임에 더욱 많은 시간과 리소스가 필요하기 때문에 물리 시뮬레이션이 프로젝트 설정 창(메뉴: Edit > Project Settings > Time)에서 설정할 수 있는 Maximum Allowed Timestep 값에 따라 일시적으로 중단될 수 있습니다.

프로젝트에서 이러한 상황을 감지하려면 CPU 사용 프로파일러 모듈을 선택하고 계층 구조 뷰의 Overview 섹션에서 Physics.Processing 또는 Physics.Simulate 에 대한 호출 수를 확인하십시오.

Calls 열에 표시된 값이 1인 CPU 사용 프로파일러
Calls 열에 표시된 값이 1인 CPU 사용 프로파일러

위 그림의 예에서 Calls 열의 값 1은 마지막 논리 프레임 중에 물리 시뮬레이션이 한 번 호출되었음을 나타냅니다.

호출 카운트가 10에 가까우면 문제가 있음을 의미합니다. 문제를 해결하려면 먼저 물리 시뮬레이션 빈도를 줄이십시오. 문제가 계속되면 (물리 엔진이 게임 타임에 보조를 맞추기 위해) 많은 시뮬레이션 호출을 사용하기 직전에 무거운 프레임을 초래할 수 있는 원인을 확인해야 합니다. 때로는 무거운 그래픽스 프레임으로 인해 나중에 씬에서 물리 시뮬레이션이 더 많이 호출될 수 있습니다.

씬의 물리 시뮬레이션에 대한 자세한 내용을 보려면 모듈 세부 정보 창의 상단에 있는 검색 상자를 선택하고 Physics.Processing 을 검색한 후 창 오른쪽 상단의 드롭다운에서 Show Calls 를 선택하십시오. 그러면 씬을 업데이트하기 위해 실행되는 물리 엔진 작업의 이름이 표시됩니다. 가장 일반적인 두 가지 이름은 다음과 같습니다.

  • Pxs: ’PhysX solver’의 약어로, 조인트에 필요한 물리 엔진 작업입니다. 겹치는 리지드바디의 접촉을 확인하는 데도 필요합니다.
  • ScScene: 씬을 업데이트하고 넓은 페이즈와 좁은 페이즈를 실행하고 리지드바디를 통합(힘과 충격으로 인해 공간에서 바디 이동)하는 작업에 사용됩니다. 2 페이즈 충돌 검사 페이즈의 정의는 계획 알고리즘에 대한 Steven M. LaValle의 연구를 참조하십시오.
Memory Profiler module
2D 물리 프로파일러 모듈