Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FixedMathSharp icon

FixedMathSharp for Unity

Build Unity 2022.3+ API Discord

Bring FixedMathSharp's deterministic Q32.32 math into Unity without letting engine types leak into your simulation. Convert at the boundary, run the same fixed-point logic on every peer, then convert back for rendering.

Why use it?

  • Deterministic scalars, vectors, rotations, matrices, curves, bounds, and geometry for lockstep games and reproducible simulations
  • Explicit adapters for Unity vectors, rays, planes, rectangles, bounds, matrices, transforms, frustums, and animation curves
  • Inspector drawers and a ready-to-import sample for authoring fixed-point data
  • Standard and Lean packages with the same public math and Unity adapter surface

Choose one package

Important

Install exactly one variant. Both packages contain the FixedMathSharp core assembly and cannot coexist in the same Unity project.

Package Choose it when Serialization dependency
Standard (com.mrdav30.fixedmathsharp) You want the bundled MemoryPack integration. MemoryPack runtime included
Lean (com.mrdav30.fixedmathsharp.lean) You do not need MemoryPack runtime and want the smaller dependency surface. Attribute-shape shim only; it does not serialize

Lean removes the MemoryPack runtime, which can make it easier to use from Burst-oriented projects. The adapters still cross Unity managed APIs and are not blanket-certified as Burst-compatible; keep conversions at well-defined engine boundaries and Burst-compile your deterministic jobs separately.

Install

Requires Unity 2022.3 or newer and Git available to the Unity Editor. In Window → Package Manager, choose Install package from git URL… and paste one pinned URL:

https://github.com/mrdav30/FixedMathSharp-Unity.git?path=/com.mrdav30.fixedmathsharp#v7.0.0
https://github.com/mrdav30/FixedMathSharp-Unity.git?path=/com.mrdav30.fixedmathsharp.lean#v7.0.0

Pinning the tag keeps installs reproducible. Remove #v7.0.0 only when you intentionally want the repository's current default branch. The Git URLs are the canonical way to obtain matching Standard and Lean v7 packages; check the OpenUPM listing before relying on a registry version.

If your code is in a custom asmdef, reference FixedMathSharp.Runtime for Standard or FixedMathSharp.Lean.Runtime for Lean.

Your first deterministic boundary

using FixedMathSharp;
using FixedMathSharp.Geometry;
using UnityEngine;

Vector3 unityPosition = new(10f, 0f, 4f);
Vector3d fixedPosition = unityPosition.ToVector3d();

Fixed64 tick = Fixed64.FromDouble(1.0 / 60.0);
fixedPosition += Vector3d.FromDouble(6.0, 0.0, 2.0) * tick;

Vector3 renderPosition = fixedPosition.ToVector3();

Bounds unityBounds = new(unityPosition, new Vector3(2f, 2f, 2f));
FixedBoundBox simulationBounds = unityBounds.ToFixedBoundBox();

Unity values are floating point. Convert inputs once, keep simulation state in FixedMathSharp types, and convert results back only for presentation.

Unity adapter highlights

Area Examples
Math Vector2/3/4, Quaternion, Matrix4x4
World queries Ray, Ray2D, Plane, Rect, Bounds
Scene interop Transform, Camera, FixedTransform
Authoring Fixed-point property drawers and angle attributes
Curves Exact conversion when representable, explicit sampled baking otherwise

Matrix conversion deliberately transposes between Unity's column-vector model and FixedMathSharp's row-vector model. BakeToFixedCurve is deliberately an approximation: bake once while authoring or loading, then persist or distribute the fixed keys rather than baking independently on lockstep peers.

Try the sample

Select the installed package in Package Manager, open Samples, and import Demo Scene. The sample demonstrates fixed bounds and transform interop and is copied into your project's Assets/Samples folder.

Learn more

FixedMathSharp is MIT licensed. Questions and ideas are welcome on GitHub or Discord.

Releases

Sponsor this project

Contributors

Languages