Is there any way to snap to nodes of the grid during editor mode?
This would be especially useful in grid/hex or pointgraph games, such as placing obstacles or objects.
Right now I’m using GetNearest, but it doesn’t work during play.
'transform.position = (Vector3) _graph.GetNearest(transform.position).node.position;'
For 2D grids I use the following Editor Script, but I would love to access the underlying matrix of nodes used by whichever graph I’m using.
using UnityEngine;
using UnityEditor;
using System.Collections;
public class SnapToGrid : ScriptableObject
{
[MenuItem ("Position/Snap to Grid %g")]
static void MenuSnapToGrid()
{
Transform[] transforms = Selection.GetTransforms(SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
float gridx = 1.0f;
float gridy = 1.0f;
float gridz = 1.0f;
foreach (Transform transform in transforms)
{
Vector3 newPosition = transform.position;
newPosition.x = Mathf.Round(newPosition.x / gridx) * gridx;
newPosition.y = Mathf.Round(newPosition.y / gridy) * gridy;
newPosition.z = Mathf.Round(newPosition.z / gridz) * gridz;
transform.position = newPosition;
}
}
[MenuItem ("Position/Snap to Grid Micro #%g")]
static void MenuSnapToGridPixel()
{
Transform[] transforms = Selection.GetTransforms(SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
float gridx = 0.25f;
float gridy = 0.25f;
float gridz = 0.25f;
foreach (Transform transform in transforms)
{
Vector3 newPosition = transform.position;
newPosition.x = Mathf.Round(newPosition.x / gridx) * gridx;
newPosition.y = Mathf.Round(newPosition.y / gridy) * gridy;
newPosition.z = Mathf.Round(newPosition.z / gridz) * gridz;
transform.position = newPosition;
}
}
}
Any suggestions on how I can have a SnapToGraph Editor script?