2Dプロジェクトに3Dオブジェクトを表示できるのは少しUnityしてたらウワサに聞く話です。
じゃあアセットストアの3Dモデルを自由に表示できるじゃないかと思ってトライしました。
2Dに3Dを映す方法
そもそも2Dプロジェクトに3Dオブジェクトをどう映すかですが、単純にカメラの向いている方向に置けばいいのです。PerspectiveでもOrthographicでもできます。
ただこの方法だとウシを扱う座標系がUIや背景と異なるので、たとえばランダムで出現させたいときやタップやクリックした場所に出現させたいときに座標を変換する必要があります。
具体的には、カメラを通して3Dの座標系を画面の座標系に変換します。
※画面の座標系をスクリーン座標系、ウシの座標系をワールド座標系といいます
2D画面表示範囲内のランダムな点を、メインカメラで3D空間に変換する例
public class Spawner : MonoBehaviour
{
//ここにカメラをインスペクタでセットしておく
[SerializeField] private Camera main_camera;
・・・(中略)
private Vector3 getRandomPosOfCamera()
{
int x = Random.Range(0, width);
int y = Random.Range(0, height);
int z = 10;
Vector3 v = main_camera.ScreenToWorldPoint(new Vector3(x, y, z));
return v;
}
Z座標は2D空間にはないのでカメラより前の適当な値をいれておきます。
ちょっと大変なところ
前述のとおり生成くらいなら簡単そうですが・・・
たとえばウシが自動で歩いて画面端に来たら消えるという仕様にしたいとき、
ウシの現在座標をスクリーン座標に変換してから画面端と比較しないといけません。
ここでもさっきの座標変換が出てきます。
現在座標をスクリーン座標に変換してから、Screen.width、heightと比較します。
また、ウシの移動スピードもスクリーン座標ではなくワールド座標系で調整しないといけません。
これはトライアンドエラーでいい感じにしないといけなさそうです。
ぐすん。
かわいい我が子にオリジナルアプリを!
コメント