Суть модификации: размеры ячеек сетки теперь соответствуют настройкам из окна Edit -> SnapSettings...
Починен мелкий, но пакостный баг с неработающим хоткеем (теперь Ctrl+G).
PS: документация этого момента отсутствует, пришлось лезть в реестр и искать самому.
Синтаксис:
Используется cpp
using UnityEngine;
using UnityEditor;
using System.Collections;
public class SnapToGrid : ScriptableObject
{
[MenuItem ("Edit/Snap to Grid %g")]
static void MenuSnapToGrid()
{
Transform[] transforms = Selection.GetTransforms(SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
float gridx = EditorPrefs.GetFloat("MoveSnapX");
float gridy = EditorPrefs.GetFloat("MoveSnapY");
float gridz = EditorPrefs.GetFloat("MoveSnapZ");
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;
}
}
}
using UnityEditor;
using System.Collections;
public class SnapToGrid : ScriptableObject
{
[MenuItem ("Edit/Snap to Grid %g")]
static void MenuSnapToGrid()
{
Transform[] transforms = Selection.GetTransforms(SelectionMode.TopLevel | SelectionMode.OnlyUserModifiable);
float gridx = EditorPrefs.GetFloat("MoveSnapX");
float gridy = EditorPrefs.GetFloat("MoveSnapY");
float gridz = EditorPrefs.GetFloat("MoveSnapZ");
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;
}
}
}
Как пользоваться (для тех кто не знает):
Создать папку Editor
В нее добавить этот скрипт (SnapToGrid.cs)
В редакторе выделяем объекты, которые нужно подогнать под сетку и нажимаем Ctrl+G