質問: 1**)場合、コード上では**-0.5**しているため、設置されているオブジェクトに重なります(同じオブジェクトの為目では見えませんがインスペクターで重なっています)。 また、オブジェクトの下からRaycastが上を向いた状態で当たると、そのオブジェクトの下にオブジェクトを設置したいのですが、コードで、 **Y + 0.5f**されているので、重なってしまいます。 XとY座標だけを言いましたが、Z座標でも同じです。 --- > > 設置するオブジェクトの位置はRaycastが当たった位置の切り捨て+0.5fの値にしています。 > > なぜそのようにしているのかというと、オブジェクトの位置は整数ではなく、~.5の少数の形にしたいからです。 > > > と言いましたが、個人的にはこれが一番致命的な問題だと思っています。 しかし、どうしてもオブジェクトの位置は(X,Y,Zともに)~.5にしたいです。 補足してほしい情報がありましたらコメントお願いします。 回答よろしくお願いします。
回答: まず「キューブオブジェクト」の座標を`Transform`で管理しているところが間違いです。 マイクラやテラリア、ボードゲーム全般等のような、グリッドベースのゲームを作る場合は描画用座標とロジック用座標の2つを用いるのが基本です。 描画用座標はロジック用座標を元に決定されます。 今回の場合は、キューブオブジェクトのロジック用座標は整数型、描画用座標はロジック用座標+0.5ということになります。 新たに置くキューブオブジェクトのロジック用座標は、`Ray`が当たったキューブオブジェクトのロジック用座標と、`RaycastHit`から得られる衝突面の法線を元に計算できます。 今回の問題ではありませんが、キューブオブジェクトひとつひとつに`Monobehaviour`を付けて更新処理をさせるのは非常に負荷が高くなります。 いわゆるマイクラの「チャンク」のようなブロック管理のグループを用いて、それぞれのグループにそのグループに属するブロックの更新処理をさせるのが良いでしょう。