Скипт автоматической привязки объектов(точнее префабов) в Unity сцене к определённой сетке. Очень удобно таким образом расставлять игровые штуки.
using UnityEngine;
using System.Collections;
//Привязка объекта к сетке в окне редактора
[ExecuteInEditMode]
public class SnapToGrid : MonoBehaviour
{
#if UNITY_EDITOR
[Header("Привязка объекта к сетке")]
public bool snapToGrid = true;
[Header("Размер сетки")]
public float snapValue = 0.32f;
[Header("Брать размер сетки из SpriteRenderer")]
public bool snapValueAuto = true;
//********************************************************************************
//*******************************************************************************
void Update ()
{
if (snapToGrid)
{
if(snapValueAuto==true)
{
snapValue =gameObject.GetComponent<SpriteRenderer>().bounds.size.x;
}
Vector3 offset = Vector3.zero;
transform.position = RoundTransform (transform.position , snapValue) + offset ;
}
}
//**********************************************************************************************
//**********************************************************************************************
private Vector3 RoundTransform (Vector3 v, float snapValue)
{
return new Vector3
(
snapValue * Mathf.Round(v.x / snapValue - snapValue/2) + snapValue/2,
snapValue * Mathf.Round(v.y / snapValue - snapValue/2) + snapValue/2,
v.z
);
}
//*************************************************************************************
//******************************************************************************
void OnDrawGizmosSelected()
{
Vector3 start = new Vector3(transform.position.x - snapValue/2,transform.position.y + snapValue/2,transform.position.z);
Gizmos.color = Color.yellow;
//Gizmos.DrawSphere(start, 0.1f);
float len = snapValue * 2;
Gizmos.color = Color.gray;
for (float i = len; i >= -(len); i -= snapValue)
{
Gizmos.DrawLine (new Vector3 (start.x - len , start.y-i, start.z), new Vector3 (start.x + len, start.y-i, start.z));
Gizmos.DrawLine (new Vector3 (start.x-i, start.y-len, start.z), new Vector3 (start.x - i , start.y + len, start.z));
}
}
#endif
}
Скрипт вешается на префаб и с тех пор он начинает привязываться по заданой сетке.