Snapping To A Grid - Trouble With Mathf.Round

Hey :slight_smile:
This is hard for me to explain so please bare with me.

In my scene I have objects (Mods) that can be dragged around from above, these then snap to a grid. This works for any objects that has dimensions that are odd (eg 1x1). Here is part of the script here used to round them:

function Mod1x1()
{
	currentPos = transform.position;
	transform.position  = Vector3 (Mathf .Round (currentPos.x), 0, Mathf .Round (currentPos.z));
}

However if the modules are even in scale (eg 2x2), when their positions are rounded they do not align with the grid correctly. I need their positions to be offset by 0.5. The problem is when I offset them by 0.5, they then want to get rounded up to the next grid area. This results in a messy loop with the Mod skipping between 2 positions, when being dragged around.

My current work around is to offset it by slightly under 0.5:

function Mod2x2()
{
	currentPos = transform.position;
	transform.position  = Vector3 (Mathf .Round (currentPos.x) + 0.499999, 0, Mathf .Round (currentPos.z) + 0.499999);
}

I do not like this method, as they are not truly in the right position.

Any ideas on how can I can solve this? Maybe not even using Mathf.Round?

Many thanks,
Magnus

Mathf.Floor(currentPos.x) + 0.5

?? Don’t know if this will work for sure, but it eliminates the rounding issue. Might have issues with negative coordinates.