いんでぃーづ

ゲームいろいろ、いろいろ自由

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

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

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

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を使った方法だと前回の自由移動と共存できないので、モニュメントバレー作りたかったら移動部分は自前で作らんとあかんですね。


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。