テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

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で隠す際に使えます。
f:id:tsubaki_t1:20140722010128g:plain

ScreenToWorldPoint

スクリーン座標をワールド座標へ変換します。
マウスがタッチしている座標の取得に使います。カメラのタイプがProjectionの場合は渡すVector3のZ値を指定しないと、狭い範囲で取得するので注意が必要です。

f:id:tsubaki_t1:20140722010129g:plain

 ViewportToWorldPoint

ビューポートの座標をワールド座標に変換します。
「画面外判定」の範囲を取得する際に使用します。例えば v3(x:0, y:0, z:0)の値を渡すと左下、 v3(x:1, y:1, z:0)の値を渡すと右上の座標を得られます。
ただし誤差があるので注意が必要です。
f:id:tsubaki_t1:20140722010130j:plain

座標のサンプル

関連

tsubakit1.hateblo.jp