Unity3D
Minecraftのような、FPSの状態です。
カメラの中心から向いている前にRaycastを飛ばしています。
###やりたいこと
Scale(1, 1, 1)のキューブオブジェクト(Prefabオブジェクト)をMinecraftのように設置できるようにしたいです(Raycastが側面と当たっていたら側面側にオブジェクトを設置、Raycastがオブジェクトの下に当たっていたらその下にオブジェクトを設置できるようにしたい)。設置するオブジェクトの位置はRaycastが当たった位置の切り捨て+0.5fの値にしています。
なぜそのようにしているのかというと、オブジェクトの位置は整数ではなく、~.5の少数の形にしたいからです。
地面の位置はy = 0です。
###できていること
オブジェクトの上側にRaycastが当たっているときは、その上にオブジェクトを設置することはできています。
###現在のコード
C#
1 GameObject Prefab; 2 float distance = 5; 3 Ray rayFPS = new Ray(Camera.main.gameObject.transform.position, Camera.main.gameObject.transform.forward); 4 if (Physics.Raycast(rayFPS, out hitFPS, distance)) 5 { 6 if (Input.GetKeyDown(KeyCode.K)) 7 { 8 Instantiate(Prefab, new Vector3(Mathf.CeilToInt(hitFPS.point.x) - 0.5f, Mathf.CeilToInt(hitFPS.point.y) 9 + 0.5f, Mathf.CeilToInt(hitFPS.point.z) - 0.5f), Quaternion.Euler(-90, 0, 0)); 10 } 11 }
###起こる問題
上のコードでオブジェクトを設置しているのですが、これだと、オブジェクトの側面がRaycastの当たった場所になると、設置してあるオブジェクトと重なります。
また、オブジェクトの側面にRayが当たっているとき、Raycastのヒット位置のx座標が自分が立っている位置よりも大きい(例えばプレイヤーのx = 1、hitFPS.point.x = 5)場合、コード上では**-0.5しているため、オブジェクトのScale 1個分**こっち側に設置されます。
しかし、オブジェクトの側面にRayが当たっているとき、Raycastのヒット位置のx座標が自分の立っている位置よりも小さい(例えばプレイヤーのx = 5、hitFPS.point.x = 1)場合、コード上では**-0.5**しているため、設置されているオブジェクトに重なります(同じオブジェクトの為目では見えませんがインスペクターで重なっています)。
また、オブジェクトの下からRaycastが上を向いた状態で当たると、そのオブジェクトの下にオブジェクトを設置したいのですが、コードで、 Y + 0.5fされているので、重なってしまいます。
XとY座標だけを言いましたが、Z座標でも同じです。
設置するオブジェクトの位置はRaycastが当たった位置の切り捨て+0.5fの値にしています。
なぜそのようにしているのかというと、オブジェクトの位置は整数ではなく、~.5の少数の形にしたいからです。
と言いましたが、個人的にはこれが一番致命的な問題だと思っています。
しかし、どうしてもオブジェクトの位置は(X,Y,Zともに)~.5にしたいです。
補足してほしい情報がありましたらコメントお願いします。
回答よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。