2018/2/24 追加更新
スクリーン座標をワールド座標に変換する
標題の通り、Unityでスクリーン座標からワールド座標を取得する方法を記載します。
まずは、マウスポイントされた座標をワールド座標に変換するSampleコードを示します。
```
Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
```
# ワールド座標
Unityでは画面の位置と、シーンの中の位置は必ずしも一致していません。
Unityでは、シーンの中に無限に広がる空間を持っており、そこにSpriteを配置しています。
この無限空間の座標をワールド座標と呼びます。
# スクリーン座標
スクリーン座標は、ワールド座標の中から、画面上の左上から距離を測った距離を指します。
# Unityでマウスポイント(タップ)座標を取るには
マウスポイント、タップ座標はスクリーン上の座標ですから、PGM上で処理するには、ワールド座標に変換してから処理を行わないと行けません。
これを実現するのが、Cameraオブジェクトです。
Sampleに示した、
```
Camera.main
```
は、メインカメラオブジェクトです。
このCamera.mainに属している、ScreenToWorldメソッドを呼び出すことで、Main Cameraのスクリーン座標をワールド座標に変換することが出来ます。
変換したワールド座標はVectore2オブジェクトとして返却されます。
ScreenToWorldPointで座標がずれる時
私がハマったのですが、
単純に
Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
で、Input.mousePositionを与えるだけだと、Input.mousePositionはx,yしか入っていないため、ずれてしまいます。
例えば、2Dで出す場合は、
Vector3 cameraPosition = Input.mousePosition;
cameraPosition.z = 10.0f;
この後に、
Vector2 pos = Camera.main.ScreenToWorldPoint(cameraPosition);
とやるとうまくとれます。
※10.0は、2D上のカメラのzの距離を入れています。上記カメラのz軸座標で一度Vectorを作ってScreenToWorldPointで変換します。