Skip to content

Instantly share code, notes, and snippets.

@CSaratakij
Forked from estebanpadilla/AutoSnap.cs
Created October 10, 2015 05:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CSaratakij/f006b37f1387ece26e5e to your computer and use it in GitHub Desktop.
Save CSaratakij/f006b37f1387ece26e5e to your computer and use it in GitHub Desktop.
Auto snap to grid in Unity If you need to auto snap a gameObject to the grid in unity this script will help you. Usage: Create a Editor folder in your assets folder. Add the AutoSnap.cs script to the Editor folder. To open press Command + L (Mal), Control + L (PC) Source: http://answers.unity3d.com/questions/148812/is-there-a-toggle-for-snap-to-…
using UnityEngine;
using UnityEditor;
public class AutoSnap : EditorWindow
{
private Vector3 prevPosition;
private bool doSnap = true;
private float snapValue = 1;
[MenuItem( "Edit/Auto Snap %_l" )]
static void Init()
{
var window = (AutoSnap)EditorWindow.GetWindow( typeof( AutoSnap ) );
window.maxSize = new Vector2( 200, 100 );
}
public void OnGUI()
{
doSnap = EditorGUILayout.Toggle( "Auto Snap", doSnap );
snapValue = EditorGUILayout.FloatField( "Snap Value", snapValue );
}
public void Update()
{
if ( doSnap
&& !EditorApplication.isPlaying
&& Selection.transforms.Length > 0
&& Selection.transforms[0].position != prevPosition )
{
Snap();
prevPosition = Selection.transforms[0].position;
}
}
private void Snap()
{
foreach ( var transform in Selection.transforms )
{
var t = transform.transform.position;
t.x = Round( t.x );
t.y = Round( t.y );
t.z = Round( t.z );
transform.transform.position = t;
}
}
private float Round( float input )
{
return snapValue * Mathf.Round( ( input / snapValue ) );
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment