How to paint with GameObjects into scene with grid?

I’ve had some bad experiences recently using some of the 3d tile editors in the asset store that either don’t do what they say, have terrible bugs, terrible support, terrible performance or a combination of the above. So I’ve decided to go back to basics to avoid that mess and due to the fact that 99% of the time I am just painting with GameObjects anyway.

So with that mini rant over, my question:

How can I select a GameObject in my Project palette and “paint” it into a scene and have it align with a grid?

(Ideally it would not paint where an object already exists. Caution must be taken with how this check is implemented. One of the extremely poorly performing tile editors I used does this lookup by parsing through ALL of the placed objects looking for GameObject filenames that are actual coordinates. So for example, GameObject would be named "(-12 x 14 x 21)! … This is horribly slow at the best of times and just impossible to use with large number of times.

Some faster lookup with a hash table or quadtree with deferred object creation when idle or on mouse up would be better.)

Just for clarity, I do not want to paint textures onto an obj

You can specify ExecuteInEditMode tag for a script start or update functions:

Using this, write a script that will be attached to each of your Tile game objects which will align them to the nearest XYZ coordinate according to your tile dimensions.

For example, if you drop a tile object into the world at say, 6.7876… of X axiz, script will automatically move it to “7” if your object is 1x1x1 in size.

Further, you can write a public static class which contains nothing except your grid size data or such, so that you can change your grid at any time if you wish, and have your script which execute in Editor read from that before they re-align the Tiles.