UnityのCameraが使う3つの座標系
目次
3つの座標系
Unityの使用するカメラでは、3つの座標系があります。すなわち「スクリーン座標」「ワールド座標」「ビューポート座標」です。
スクリーン座標
解像度と一致します。例えば640x480の場合、左が0で右が640です。ピクセルパーフェクトで座標を指定したい場合、この値が基本となります。
マウスの座標はスクリーン座標で取得しているため、マウスの値を他の2つへ変換したい場合、この値が基本となります。また、OnGUIはこの値が基本値です。
ワールド座標
3D空間内の座標の事を指します。例えば pos(x:0, y:0, z:0)のような形で、特定のオブジェクトを撮影する際に便利です。
ビューポート座標
スクリーン座標の値を0〜1にした物です。マルチレゾリューション環境下で左上や右下といった座標を指定する際に便利です。GUITextureやGUITextといった旧来のUIシステムはこれを使用しています。
各座標系を使用するケースと変換
これらの座標変換を行う場合、特にワールド座標へ変換する場合は対象物を撮影しているCameraコンポーネントを使用します。
特によく使うのは以下の3つです。
WorldToViewportPoint
ワールド座標をビューポートへ変換します。
GUITextでオブジェクトを追跡する名前を付けたり、パンツのような物をGUITextureで隠す際に使えます。
ScreenToWorldPoint
スクリーン座標をワールド座標へ変換します。
マウスがタッチしている座標の取得に使います。カメラのタイプがProjectionの場合は渡すVector3のZ値を指定しないと、狭い範囲で取得するので注意が必要です。
ViewportToWorldPoint
ビューポートの座標をワールド座標に変換します。
「画面外判定」の範囲を取得する際に使用します。例えば v3(x:0, y:0, z:0)の値を渡すと左下、 v3(x:1, y:1, z:0)の値を渡すと右上の座標を得られます。
ただし誤差があるので注意が必要です。