- Backend: NVIDIA PhysX 5.1 through
physx-sys(Unity uses PhysX 4.1, so contacts and the solver behave alike). The bindings are archived upstream; we build the bundled PhysX source (about 2 minutes once, then cached) and own any fixes. tassix_physics: a scene mirroring components by handle: Rigidbodies as dynamic actors, colliders on the nearest Rigidbody up the hierarchy or on a static actor, geometry scaled by lossy scale, Unity's defaults (contact offset 0.01, solver 6/1, max angular velocity 50, bounce threshold 2, sweep-and-prune). A filter shader implements the layer collision matrix and Unity's trigger and kinematic rules; events carry pre-step relative velocities and contacts. Transforms sync both ways (script edits teleport, moved bodies write back). Convex and triangle mesh cooking for MeshColliders.- Scripting API:
Rigidbody(forces in all ForceModes, velocities, MovePosition/MoveRotation, constraints, sleep, CCD modes; Unity 6 and older property names), Box/Sphere/Capsule/MeshCollider,PhysicsMaterial,Physics(gravity, layer matrix, Raycast/RaycastAll/RaycastNonAlloc/Linecast, SphereCast/BoxCast/CapsuleCast, OverlapSphere/Box/Capsule, Check*),Collision/ContactPoint/RaycastHit,GameObject.layer,GameObject.Find,GetComponentInParent/InChildren. Physics steps after FixedUpdate; OnTrigger* then OnCollision* go to both objects (and their Rigidbody's object), including disabled scripts. - Conformance:
physics_basic(219 checks recorded in Unity: defaults, free fall, landing frames and contacts, trigger order around FixedUpdate, layers, kinematic bodies, queries) passes, with resting positions well inside 1e-3. - Sample:
dotnet/samples/scenes/physics.json: a ball spawner, ramp, kinematic paddle and collectible triggers; about 0.3 allocations per frame including spawning.
Phase 3 · Slice 1 ·