【3Dゲームエンジン】Unity質問スレッド10
■ このスレッドは過去ログ倉庫に格納されています
0342314
2014/07/08(火) 22:38:42.03ID:A3tN0KUo難しく考えすぎだと思う
hit.pointはワールド座標ですがtransform.InverseTransformPoint(Vector3)でキューブオブジェクトのローカル座標に変換できます
後は(1,0,0),(-1,0,0),(0,1,0),(0,-1,0),(0,0,1),(0,0,-1)との内積を計算して1に最も近いのがヒットした面の法線方向です
立方体なら簡単に分かる問題
void Update () {
if(Input.GetMouseButton (0)) {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit)) {
var hitPointLocal = transform.InverseTransformPoint(hit.point);
var faces = new Vector3[] {
Vector3.right,
-Vector3.right,
Vector3.up,
-Vector3.up,
Vector3.forward,
-Vector3.forward,
};
var face = faces.OrderBy((c) => Mathf.Abs((1.0f - Vector3.Dot(c,hitPointLocal)))).First();
Debug.Log (face);
}
}
}
こんな感じでどうでしょうか?(Linq使ってるのでusing System.Linq;を頭に追加してください)
■ このスレッドは過去ログ倉庫に格納されています