読者です 読者をやめる 読者になる 読者になる

自分用Unityメモ:マウス位置を得る(3Dの場合)

マウス(あるいはタップされた位置)はInput.mousePositionで得ることが出来る。
これをスクリーン座標に変換することで画面上の位置を取得することが出来る。

Vector3 v = Camera.main.ScreenToWorldPoint(Input.mousePosition);

ただ、3Dのときは上手くいかない。
理由は、mousePositionにz軸の指定がないからみたい。
なので、変換前に入れておくと良いらしい。

    Vector3 pos = Input.mousePosition;
    pos.z = 10.0f;
    Vector3 v = Camera.main.ScreenToWorldPoint(pos);

スクリーン座標じゃなくてワールド座標内での
特定のXZ平面上の座標を得たいという場合は、
見えない平面オブジェクトを配置しておいて
カメラからrayを飛ばし、その接触点を得るという方法もある。
というか、今回使ってるのはこっちなのダ....。

     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
     RaycastHit hit;
     int layerMask = (1 << LayerMask.NameToLayer("HitPanel")); //適当なレイヤーマスクを設定するよ

     if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
     {
         //レイが当たった位置を得るよ
         Vector3 pos = hit.point;
     }