生成したピースの Pivot
現状すべてのピースの GameObject を (0, 0, 0) 座標に生成しており頂点をずらすことで並べている
そのため、ピースを回転させたりする場合 Pivot が (0, 0, 0) なので
Z回転を入れると下図のように意図しない回転になる
Pivot 調整
少し見づらいが3×3の場合 (1, 2) のピースの Pivot を中心に移動させたい場合
横に1ピース半、縦に2ピース半移動させれば Pivot が中心にくる
あとは座標によってずらす位置が違うのでそれを踏まえると以下のようにすればpivotを中心にできる
// postionが(0, 0)などの位置 // 1ピースのサイズをテクスチャから計算 (テクスチャサイズ / 分割数) var size = param.TextureSize / param.Size; mesh.vertices = mesh.vertices .Select(v => new Vector3( v.x - size.x * position.x - size.x / 2f, v.y - size.y * position.y - size.y / 2f, v.z) ).ToArray();
LocalPosition の調整
すべての Pivot を中心に持ってきたので生成するピースの座標を変更しない場合すべてが中心に来てしまう
※実際にジグソーパズルとして遊ぶ場合はバラバラで問題無いが・・・
(0, 0) のピースを正しい位置にする場合はテクスチャの半分の座標引き、縦横0.5ピース足せば正しい位置になる (1, 2) のピースを正しい位置にする場合はテクスチャの半分の座標引き、縦2.5ピース横1.5ピース足せば正しい位置になる
obj.transform.localPosition = -size * param.Size / 2f + size * position + size / 2f;
これで正しい位置に配置することができました