この記事でのバージョン
Unity 5.1.0f3 Personal
はじめに
今回は2Dと3Dの座標変換のやり方です。
例えば、3Dオブジェクトの近くに2Dのラベルを表示したい場合に使えます。
逆に2Dオブジェクトの近くに3Dオブジェクトを配置したい場合にも使えます。
カメラと座標
まず、2Dか3D表示かは、CameraのProjectionで決まります。
下の画像は、上が3Dオブジェクト用のカメラ、下がUI用の2Dカメラです。
Projectionの設定内容は以下の通りで、
Perspective 透視投影。遠近感の有る(遠くに有るほど小さくなる)描画となる
Orthographic 平行投影。遠近感の無い(距離に関係無く、同一のサイズで描画される)描画となる
Perspectiveが3D、Orthographicが2Dとなります。
座標
次にCameraで扱える座標についてです。
Cameraは以下の3つの座標を使え、相互に変換するメソッドも用意されています。
- ワールド座標
- ビューポート座標
- スクリーン座標
今回重要なのはビューポート座標とワールド座標で、例えば
カメラAに映る物体A
と同じ位置に
カメラBに映る物体B
を移動させる手順は以下のようになります。
- 物体AのカメラAにおけるビューポート座標を取得
- 取得したビューポート座標にカメラB上で表示するためのワールド座標を取得
- 取得したワールド座標に物体Bを移動
この他にZ軸の調整が必要になりますが、
3D→2Dでも、2D→3Dどちらの場合も同じやり方ですし、
別カメラの3D→3Dでも同じやり方が使えます。
3D→2D
3D→2D変換の例として、3DのCubeが移動したら、
それを2DのLabelが追っかけるスクリプトを作ってみました。
スクリプトは以下の通りです。
Z座標を0にしている点に注意が必要です。
2D→3D
2D→3D変換の例として、2DのLabelが移動したら、
それを3DのCubeが追っかけるスクリプトを作ってみました。
スクリプトは以下の通りです。
2D→3Dの時とはZ座標の調整位置が違う点に注意が必要です。