Unity 5.0는 PhysX3.3 SDK 업그레이드를 제공합니다. 4.x 프로젝트에서 작업을 수행하기 전에 Unity 5의 고성능 물리 블로그 포스트를 잠깐 살펴보십시오. 그러면 새로운 코드 베이스에 기대할 수 있는 사항을 미리 확인할 수 있습니다. PhysX3는 PhysX2와 100% 호환되지 않으므로 업그레이드할 때 사용자가 몇 가지 작업을 수행해야 합니다.
Unity 5.0의 물리는 이전 버전보다 최대 2배까지 더 빠르게 작동할 것이라 기대할 수 있습니다. 익숙한 컴포넌트는 대부분 계속 유지되고 전과 동일하게 작동합니다. 물론 일부 동작은 동일하게 구현이 불가능하였으며, 일부 동작의 경우 기존 코드베이스의 한계로 인한 이상 동작으로 밝혀져 수정을 가했습니다. 가장 크게 변경된 두 가지 컴포넌트는 Cloth 컴포넌트와 WheelCollider 컴포넌트입니다. 아래에는 각 컴포넌트에 대한 섹션이 포함되었습니다. 또한 전체 물리 코드에 걸쳐 비호환을 초래하는 더 작은 변경 사항도 여러 개 있습니다.
적응적 힘은 큰 스택을 시뮬레이션하는 데 도움이 될 수 있도록 도입되었지만, 오직 데모 버전에서만 올바르게 동작하였고, 실제 게임에서는 이상 동작을 유발하였습니다. 에디터 물리 프로퍼티(Edit -> Project settings -> Physics -> Enable adaptive force로 이동)에서 적응적 힘을 켤 수 있습니다.
PhysX3는 해당 문제를 해결하는 기능이 있지만, 큰 문제가 없는 솔루션으로 간주되기 때문에, 더 이상 전환할 수 없습니다.
업그레이드 후에 스프링 파라미터를 조정해야 할 수 있습니다.
터레인의 물리 머티리얼을 지정하려면 TerrainCollider.sharedMaterial과 TerrainCollider.material을 사용합니다. TerrainData를 통해 물리 머티리얼을 설정하는 기존 방식은 더 이상 사용할 수 없습니다. 또한 이제는 콜라이더마다 터레인 물리 머티리얼을 지정할 수 있습니다.
복합 콜라이더를 사용하는 경우 이제 OnCollisionEnter가 각 접촉 페어마다 한 번씩 호출됩니다.
이제부터는 볼록 셰이프에만 트리거가 포함될 수 있습니다(PhysX 제한 사항).
동적 바디(즉, 키네마틱 = 거짓(false)인 리지드바디가 연결된 바디)에는 더 이상 오목한 메시 콜라이더가 포함될 수 없습니다(PhysX 제한 사항).
오목한 메시와 충돌하도록 하려면 정적 콜라이더와 키네마틱 바디에서만 가능합니다.
래그돌 조인트 설정을 미세 조정해야 할 수 있습니다.
다음 제안 사항은 일반적인 조인트에도 해당됩니다.
이 가이드의 최신 버전은 조인트와 래그돌 안정성 페이지를 참조하십시오.
“Angular Y Limit”과 “Angular Z Limit”을 작은 각도로 설정하지 마십시오. 설정에 따라, 안정성을 유지하려면 최소 각도가 약 515도여야 합니다. 작은 각도를 사용하는 대신 각도를 0으로 설정해 보십시오. 그러면 축이 고정되고 안정적이 시뮬레이션이 가능합니다.
“Enable Preprocessing”을 false 값(선택 안 함)으로 설정합니다. 전처리 사용을 비활성화하면 조인트의 “폭발”을 방지하는 데 도움이 됩니다. 조인트 제약조건을 충족할 수 있는 방법이 없는 상황에 강제로 노출되는 조인트는 “폭발”할 수 있습니다. 이러한 현상은 래그돌이 부분적으로 벽 안에서 스폰되는 경우와 같이 조인트로 연결된 리지드바디가 정적 충돌 지오메트리에 의해 분리되는 경우 발생할 수 있습니다.
래그돌이 부분적으로 벽 안에서 스폰되거나 강한 힘에 의해 밀리는 경우와 같이 극한적인 상황에 노출되는 경우에는 조인트 솔버가 리지드바디 연결을 유지할 수 없게 됩니다. 그러면 스트레칭 또는 “신체 부위 클라우드”가 발생할 수 있습니다. “ConfigurableJoint.projectionMode” 또는 “CharacterJoint.enableProjection”을 사용하여 조인트의 프로젝션을 활성화해야 합니다.
조인트로 연결된 바디가 떨리는 경우 Edit -> Project Settings -> Physics -> Solver Iteration Count를 높여 보십시오. 1020 사이로 설정해 보십시오.
직접 변환 액세스를 다른 바디에 조인트로 연결된 키네마틱 바디와 함께 사용하지 마십시오. 이렇게 하면 PhysX가 해당 바디의 내부 속도를 계산하는 과정이 생략되므로 솔버가 내놓는 결과에 문제가 발생할 수 있습니다. 일부 2D 프로젝트에서 직접 변환 액세스를 사용해 리그의 루트 분에 있는 transform.direction을 수정하여 캐릭터를 플립하는 경우가 확인된 적이 있습니다. MovePosition/MoveRotation/Move를 대신 사용하면 동작이 크게 개선됩니다.
Unity 4에서 사용했던 잠금 메커니즘은 기본적으로 잠긴 회전 변경을 폐기하고 포스트 솔버 단계로서 각속도를 재설정하는 것이었습니다. 이 방법은 대체로 효과적이었지만, 솔버에서 프레임마다 회전을 조정하려고 했기 때문에 바디가 수면 상태로 전환하지 못하는 문제가 있었고, 몇 년 동안 관련 사례가 몇 번 발생했습니다. PhysX3 통합 작업을 진행하면서 PhysX 3.3의 새 기능인 고정된 회전 자유도에 무한 관성 텐서 컴포넌트를 설정할 수 있는 기능을 활용하였습니다. 이 기능은 이제 솔버에서 지원되므로, 바디가 올바르게 수면 상태로 전환됩니다. 하지만 이 기능은 관성적이므로 로컬 좌표에서만 적용됩니다.
새로운 WheelCollider는 PhysX2의 코드에서 완전히 달라진 새로운 차량 시뮬레이션 라이브러리인 PhysX3 Vehicles SDK를 사용합니다.
새로운 WheelCollider에 대한 자세한 내용은 여기를 참조하십시오.
Unity 5는 새로운 PhysX SDK에서 제공하는 완전히 새로 작성된 천 솔버를 사용합니다. 이 솔버는 캐릭터 복장을 고려하여 디자인되었고, 구 버전에 비해 성능과 안정성이 크게 개선되었습니다. Unity 5는 Unity 4의 SkinnedCloth 및 InteractiveCloth 컴포넌트를 SkinnedMeshRenderer와 함께 작동하는 Cloth 컴포넌트 하나로 대체합니다. 기능은 이전 SkinnedCloth 컴포넌트와 유사하지만, 이제는 스킨이 없는 임의의 메시를 SkinnedMeshRenderer에 할당할 수 있으므로 천 시뮬레이션을 모든 메시에서 처리할 수 있습니다.
하지만 이전 InteractiveCloth에서 사용 가능했던 일부 기능은 새 PhysX 버전에서 고성능으로 구현하기 어렵기 때문에 더 이상 지원되지 않습니다. 구체적으로 설명하면 다음과 같습니다.