Смотрите, я тоже пытаюсь сделать размещение по сетке, если это то что вы имеете ввиду, то вам просто нужно добавить компонент ClickDetector к объекту а потом в скрипте проверять наведение на этот объект через
meshname.ClickDetector.MouseHoverEnter(function(player)
--устанавливаем позицию объекта, который должен передвигаться по сетке
movablemeshname.Position = meshname.Position
--получается, что при наведении мыши на определенный объект, будет присваиваться позиция объекта на
--который навели, объекту, который должен перемещаться по сетке
--также надо учитывать, что элемент, который должен перемещаться по сетке, назовем его PartGrid. будет
--находиться в объекте, на который наводят, назовем его PartHover. Так вот, что-бы этого не происходило, надо заменить строку кода с присваиванием позиции на что-то на подобие этого
movablemeshname.Position = Vector3.new(meshname.Position.X, meshname.Position.Y+value, meshname.Position.Z)
--value это значение, на которое увеличивается позиция объекта по Y ( по вертикали ), я вписывал методом проб
--и ошибок, но я думаю что можно вывести формулу или посчитать. Так вот, теперь Нашему PartGrid присваивается
--позиция элемента PartHover по оси икс, зед и игрек + value, это означает, что объект PartGrid будет находится не в PartHover. а "на нем".
end)
можете добавить функцию MouseHoverEnded если хотите например вывести сообщение или закончить расположение объекта.
Надеюсь помог, что знал, то рассказал.