2Dから3Dへ変換する
マウスをクリックした位置の3D空間上の座標を取得する(Rayを飛ばす場合)
クリックした位置から座標を取得したい場合など、対象のz座標がわからない時にはRayを飛ばしてVector3の座標を取得します。
void Update()
{
if(Input.GetMouseButtonUp(0)) {
RaycastHit hit;
if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100)) {
Vector3 target = hit.point;
print(target);
}
}
}
マウスの位置の3D空間上の座標を取得する(対象のz座標がわかっている場合)
対象のz座標がわかる場合はカメラからScreenToWorldPoint
を利用してその座標を知る事も可能です。
void Update()
{
float distance = Vector3.Distance (transform.position, Camera.main.transform.position);
Vector3 target = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, distance));
print(target);
}
マウスの位置の3D空間上の座標を取得する(カメラに映る最短距離のz座標)
Camera.main.nearClipPlane
で描画している一番手前のz座標が取得できますが、そのz座標上で取得する事も可能です。
void Update()
{
Vector3 target = Camera.main.ScreenToWorldPoint (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane));
}
3Dから2Dへ変換する
3D空間上の座標を2D空間上の座標に変換する
逆に3D空間上の座標から2Dの画面上の位置を取得するにはRectTransformUtility.WorldToScreenPoint
を利用して変換する事が可能です。
void Update()
{
Vector2 target = RectTransformUtility.WorldToScreenPoint (Camera.main, transform.position);
print(target);
}
Vector2で取得できる座標は左下が(0,0)となっているので、画像のように追従させる場合にはテキストオブジェクトのアンカーは左下に設定しておきましょう。