Cooooding!!

Unity(C#)を使ったゲーム開発関連Tipsなど

クリックした先の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