クリックした先のXY平面上の座標を取得する【Unity】
概要
クリックした先のXY平面上にエフェクトや敵を生成するテスト用のシーンを作るために、その座標を計算する関数を実装しました。Colliderを置いてPhysics.Raycastで座標を取得する方法もあるのですが、わざわざColliderを置くのも手間なのでColliderを使わない方法で実装してみました。
座標取得方法
public bool GetPosition(out Vector3 result) { // カメラはメインカメラを使う var camera = Camera.main; // クリック位置を取得 var touchPosition = Input.mousePosition; // XY平面を作る var plane = new Plane(Vector3.forward, 0); // カメラからのRayを作成 var ray = camera.ScreenPointToRay(touchPosition); // rayと平面の交点を求める(交差しない可能性もある) if (plane.Raycast(ray, out float enter)) { result = ray.GetPoint(enter); return true; } else { // rayと平面が交差しなかったので座標が取得できなかった result = Vector3.zero; return false; } }
この関数はカメラの向きがXY平面に対して垂直になっていなくてもXY平面上の座標を返します。
XY平面上の座標ではなくXZ平面上の座標を取りたい場合にはplaneの値を変えればOKです。
// XZ平面を作る var plane = new Plane(Vector3.up, 0);
環境
- Unity 2019.1.9f1
- VisualStudio 2019