MRが楽しい

MRやVRについて学習したことを書き残す

おいかけっこアプリの追跡ロジックにNavMeshを適用する

本日はおいかけっこアプリの改修枠です。
おいかけっこアプリにNavMeshを適用し、カメラに向けて経路選択を行って追跡するように修正しました。
f:id:bluebirdofoz:20170903165135j:plain

技術的にはこれまで学んだことをおいかけっこアプリの追跡ロジックに適用しただけです。
bluebirdofoz.hatenablog.com

ただ、キャラクタの向きが固定されてスライド移動しているように見える問題がありました。
以下の通り、Agentの設定処理に合わせて、キャラクタの方向設定の処理を追加して対応しています。
・NavMeshLogic.cs

void Update()
{
    // ロジック有効時のみ、定期処理を実行する
    if (p_Enable == false)
    {
        return;
    }

    // NavMeshロジックの実行
    // Agentの現在位置(root)と目的位置(maincamera)を設定
    p_Agent.transform.position = this.gameObject.transform.root.position;
    p_Agent.destination = Camera.main.transform.position;

    // パスの計算
    NavMeshPath path = new NavMeshPath();
    NavMesh.CalculatePath(p_Agent.transform.position, p_Agent.destination, NavMesh.AllAreas, path);
    Vector3[] positions = path.corners;

    // 移動位置差分を取得
    Vector3 diffPos = this.gameObject.transform.root.position - p_PrevPosition;
    Vector3 diffPos_horizontal = new Vector3(
        diffPos.x * 1.0f,
        diffPos.y * 0.0f,
        diffPos.z * 1.0f
    );

    // 移動差分からキャラクタの方向を決定
    if (diffPos.magnitude > 0.01)
    {
        this.gameObject.transform.root.rotation = Quaternion.LookRotation(diffPos_horizontal);
    }

    // 位置を保存
    p_PrevPosition = this.gameObject.transform.root.position;
}

おいかけっこアプリはここで一旦完成としてしまいたいと思います。
細部を詰めたら Windows ストアにアップしてみようかな。

完成とする理由の一つとして、コードが随分と複雑化してきたことがあります。
初期のMVP設計ですが、今では形が保てなくなってきました。
bluebirdofoz.hatenablog.com

今回の NavMesh もですが、HoloToolKit を初めとする利用ライブラリそれぞれが独自の伝達手段を持っているためです。
無理やりにMVP設計に落とし込むのも、無駄が多いですし。
もっと違う方法で全体の繋がりを分かりやすくする手段が必要ですね。この経験を持って一から見直してみたいと思います。