回答:
あなたはこのようなことをすることができます
int gridCubeWidth = 16, gridCubeHeight = 16;
cube.Position.X = Math.round(cube.Position.X / gridCubeWidth) * gridCubeWidth;
cube.Position.Y = Math.round(cube.Position.Y / gridCubeHeight) * gridCubeHeight;
これは基本的に、X位置とY位置を最も近いキューブディメンションの倍数に丸めます。次に、それを立方体の寸法でスケーリングして、均一な位置を取得します。
私の簡単な調査では、いくつかのジオメトリをグリッドにスナップしているとき:
ポリゴンのすべての頂点(最終位置)がグリッドの頂点と一致している限り(つまり、スナップしようとしているものがグリッドにうまく収まっている場合)、
ポリゴンの任意の頂点を最も近いグリッド頂点にスナップし、同じ変換を他のすべての頂点に適用できます。あなたは常に同じ結果の位置になります。
つまり、単純に頂点を選択してその座標を丸めることができます。または、1単位よりも大きい辺を持つグリッドを使用している場合は、オースティンの式を使用します。
cube.Position.XorYorZ = Math.round(cube.Position.XorYorZ / gridCubeWidth) * gridCubeWidth;