- Home /
Snapping To A Grid - Trouble With Mathf.Round
Hey :) 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
Answer by Dave-Carlile · Oct 18, 2013 at 02:42 PM
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.
Beautiful, that's exactly what I needed! Works fine with negatives.
Thanks :)
Your answer
![](https://koobas.hobune.stream/wayback/20220613120155im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Snap to grid after click and drag? 2 Answers
Grid Based Movement (Pokemon-like) 1 Answer
placing block on plane in a grid 1 Answer
Instantiate prefab within parameters?(Javascript) 1 Answer
Check children on a grid 1 Answer