Physics Core 2D in Unity 6.5
The Physics Core 2D release in 6000.5.0b2 introduces key updates:
- Renaming: “LowLevelPhysics2D” is now “PhysicsCore2D,” reflecting its foundational role.
- Modularity: The new module is independent, allowing the optional, separate Physics2D module to be disabled, reducing memory and build size.
- Namespace Consistency: The namespace changed from
UnityEngine.LowLevelPhysics2DtoUnity.U2D.Physicsfor 2D feature alignment. - Enhancements: Feature improvements establish a base for upcoming components to be distributed as a package within the same
Unity.U2D.Physicsnamespace.
Namespace change
Projects from versions 6.3 or 6.4 will automatically migrate to the new namespace upon opening. The underlying types remain unchanged, guaranteeing full backwards compatibility.
For maintaining compatibility with the older namespace in source files, use the following conditional compilation:
#if UNITY_6000_5_OR_NEWER
using Unity.U2D.Physics;
#else
using UnityEngine.LowLevelPhysics2D;
#endif
Dedicated Module
The new Physics Core 2D built-in module, available via the Package Manager, includes new physics features. Disabling the older physics module, if not needed, reduces memory and build size.
New PhysicsCore2D module.
Project Settings
The Physics Core 2D module now has dedicated Project Settings. The asset PhysicsLowLevelSettings2D has been renamed to PhysicsCoreSettings2D to match. This asset updates automatically and is editable directly within the Project Settings after selection in the Project view, offering more space than the Inspector.
Project Settings for editing PhysicsCoreSettings asset
Transforms
This release introduces new Transform Writing options, including callbacks and write/tween events, enabling custom transform writing and tweening. Developers can intercept standard transform writes and redirect them to custom data structures (like ECS components or buffers), with automatic pose and tween calculations available. Automatic writing now offers both parallel and sequential modes to suit different Transform hierarchy structures.
Custom Modes for Transform Writing and Tweenin g
Transform change detection is now fully integrated, offering a configurable callback (ITransformChangedCallback) for any object. This callback provides an event detailing which transforms changed and the reason (translation, rotation, scale, animation, re-parenting) at frame-start, fixed-update, or per-update. Physics component authoring also includes dedicated write methods to update transforms off the main thread without firing change callbacks, preventing re-entrant notifications.
Transform Change Mode optio n s
The Transform Plane mode now offers a new custom option, allowing users to specify an arbitrary 3D transform plane beyond the standard fixed XY, XZ, and ZY options, providing full control over 3D world transform application.
2D physics simulation writing to a custom orientated 3D pl a ne
Contact Filter Mode
The new Contact Filter Mode in PhysicsCore2D allows developers to simplify contact filter setup by choosing whether layer-based contact detection requires mutual agreement between two shapes or if a single shape’s configuration is sufficient. Additionally, a new Contact Filter Group Mode has been added, giving control over the behavior of ContactFilter.groupIndex. The new filter mode changes the previous fixed semantics so that contact is only considered when both Contact Filter instances share the same group Index, after which standard masks apply. This introduces a new, flexible grouping dimension for various custom semantics.
Global Contact Filter Opt i ons
Ignore Filter Options
The new Ignore Filter offers fine-grained control for all world queries (shape/ray casts, overlaps, character movers), supplementing category-based filtering. It allows ignoring criteria like triggers, static geometry, or specific shape types (e.g., circles). Supplied via PhysicsQuery.QueryFilter, it works across all query types without extra setup.
The Ignore Filter also extends to the physics renderer, controlling what is drawn. It can be set per-world via PhysicsWorld.drawFilter or initialized through PhysicsWorldDefinition.drawFilter, and changes are reflected instantly.
Continuous Collision Tuning
Continuous collision detection (CCD) for dynamic bodies, automatically limiting its use to maintain performance. For finer control, a per-body Collision Threshold can be configured. The default of 0.5 triggers CCD for movement of at least half the shape’s extent; setting it to 0 uses CCD for any movement. This improvement will also be added to 6.3 LTS.
Per-body Collision Threshold o p tion
Query Features
Existing overlap and test-overlap queries have been extended to support spans of objects, making it straightforward to perform multiple overlap checks in a single operation.
Ownership
Ownership is a component-authoring feature that assigns objects created by a component an owner and an ownership key. This restricts critical modifications, like object destruction, to the owner, preventing accidental issues. This release allows explicit ownership keys via PhysicsWorld.CreateOwnerKey, applicable to single or multiple objects. This simplifies multi-object management by removing the need for individual object keys. Ownership is supported across PhysicsWorld, PhysicsBody, PhysicsShape, PhysicsChain, and all PhysicsJoint types.
Maximum Worlds
The maximum number of independent, isolated worlds has been significantly increased and is now user-configurable. Previously fixed at 128 (with 127 practically available, as Unity automatically creates one default world), this limit can now be set anywhere between 1 and 1024 via the core settings.
This is particularly beneficial for projects that only need a single default world. Setting the maximum to 1 eliminates the static memory overhead associated with provisioning the full 128 worlds, saving approximately 300KB. For backwards compatibility, the default remains at 128 for now, though it is expected to change to 4 in a future update once the setting has been fully rolled out, reducing the default memory footprint as low as possible.
Global Maximum Worlds o p tion.
Rendering
Physics rendering has been improved. The simple rendering checkbox is replaced by a configurable Rendering Mode covering all player builds.
The drawing API now supports batch drawing for geometry and shapes, crucially adding the ability to directly visualize physics query inputs (arguments) and outputs (results) like ray-casts and shape-casts, removing interpretation ambiguity.
Access to draw data is now available via the requested PhysicsEvents.WorldDrawResults event.
Finally, PhysicsBody, PhysicsShape, and PhysicsJoint now include a World Drawing toggle for per-object rendering control at runtime.
Global Rendering Mode o ption.
--
The update includes numerous other improvements such as better shader performance and pixel accuracy, interpolation syncing, near-complete thread-safety, owner-based custom data, a PhysicsWorldDefinition change event, PhysicsRotate using radians or degrees, and quality-of-life additions for component creation. Many of these features have been back-ported to 6.3 LTS for consistency.
The 2D physics manual has been updated with new info as well.
Useful Links
Scripting Documentation (Unity.U2D.Physics)
PhysicsExamples2D (6000.5 branch)
Development Videos
--
Let’s discuss!
Try out the updates and share your thoughts, questions and comments in the thread. We’d love to know how you’re using it in your projects, and what works well & what needs improving.









