読者です 読者をやめる 読者になる 読者になる

いんでぃーづ

個人でゲーム開発してる上で吸収したモノたち紹介。UnityからGIMPまでなんでも。デザインとかゲーム論まで語っちゃうよ的なアレ。

MENU
{スポンサーリンク}

Unity : 錯視での瞬間移動を表現する

Unity Tips C# あのゲームを再現

先日試したモニュメントバレーの件でもういっこ。

錯視で離れている場所がつながり、さも最初から道があったかのように移動できるギミックをためしました。

f:id:sugar_affordance:20170204101806g:plain

古くは無限回廊からある手法ですね。

オブジェクトを配置

こんな感じでオブジェクトを配置しました。

f:id:sugar_affordance:20170204100509j:plain

右上の丸長い棒をプレイヤーとします。

カメラのProjectionをOrthographicにする

この設定にすることで遠近感がなくなり、奥行きを使った錯視が可能になります。
下の画像は、カメラの位置を変えずにProjection設定を変えた比較画像。

f:id:sugar_affordance:20170204092539j:plain

カメラの角度を合わせれば割とかんたんに錯視っぽくなります。

NavMeshでOffMeshLinkを設定

今回は移動を簡単にするために NavMeshAgent を使用します。
瞬間移動部分はOff-mesh Linkを使い、3D基準で空間が空いていても移動できるように設定。

f:id:sugar_affordance:20170204100951j:plain

画像の右にある矢印が瞬間移動する部分です。
移動先の透明部分にNavMeshがありますが、これはCutout設定で全透明カラーにしたマテリアルを適当することで実現可能です。

f:id:sugar_affordance:20170204101357j:plain

瞬間移動設定

瞬間移動する場所まできたら、CompleteOffMeshLink関数で瞬間移動させます。

    bool isoffmesh;
    void Update () {
        if (isoffmesh == false && agent.isOnOffMeshLink)
        {
            isoffmesh = true;
            agent.CompleteOffMeshLink();
        }
    }

ソースでは最初の一回だけ瞬間移動させたかったのでフラグ使ってます。

普通のライティングを使うと瞬間移動部分の影が映らないので、Projectorを使います。
メニューの Assets > Import Package > Effects と選択してアセットをインポートし、BlobShadowProjector.prefab を探してプレイヤーの子オブジェクトに。

NavMeshAgentで移動させてみる

NavMeshAgentのdestinationで左下の位置を指定した結果。

f:id:sugar_affordance:20170204102015g:plain


あとはカメラ(もしくはステージ)の角度を判定し、オフメッシュリンクの有効無効をきりかえれば錯視パズルの完成(?)です。
ただ、今回のNavMeshを使った方法だと前回の自由移動と共存できないので、モニュメントバレー作りたかったら移動部分は自前で作らんとあかんですね。

Amazon.co.jpアソシエイト