This is a modified version of Unity DOTS Physics version 0.6.0-preview.3, which supports cross-platform deterministic physics simulation by using soft floats.
The following packages must be installed:
- Burst
- Collections
- Entities
- Jobs
You'll need to use the UnityS.Physics
and the UnityS.Mathematics
namespaces instead of the usual Unity.Physics
and Unity.Mathematics
.
See Unity Physics manual for documentation.
For a deterministic physics simulation:
- All bodies must be created in the same order every time you create the simulation
- Bodies must only be modified in a system that is updated in FixedStepSimulationSystemGroup
- You must not use the result of floating point operations as input for the physics engine
- Be careful when using hashmaps / hashsets, because iterating over them may be non-deterministic (it depends on the implementation).
- Check how to use soft floats here.
- Make sure that your code is also deterministic.
See the ExampleScene scene for an example. After running it, your simulation should look exactly like this:
Unity.Physics
, Unity.Mathematics
, and Unity.Transforms
are licensed under the Unity Companion License.
Soft floats
is licensed under the MIT License. See https://github.com/Kimbatt/soft-float-starter-pack for more information.