【Unity】敵に目的地までの経路上でワープさせる

投稿者: | 2020-07-18

前の記事のスクリプトで、ナビメッシュエージェントに目的地への経路上でワープさせてみます。

second += Time.deltaTime;

if (second >= 3f)
{
    second = 0f; 
    Vector3 pos = corners[Random.Range(0, corners.Length)]; // ランダムで選んだコーナーポイントの位置
    agent.Warp(pos); // ワープさせる
    
    Debug.Log(agent.pathPending + " " + agent.destination + " " + pos + " " + transform.position);
}

3秒ごとに、ランダムで選んだコーナーポイントへワープさせます。すると、ワープ後にナビメッシュエージェントがその場を動かなくなりました。

コンソールを見ると、目的地がワープさせた地点に変更されています。Warp()を呼んだフレームでナビメッシュエージェントはワープ先に移動していて、経路探索も終わっているようです。

ワープ後に目的地を再設定してみると、冒頭のGif画像のように、ナビメッシュエージェントが目的地への移動を継続するようになりました。この場合はpathPendingはtureなので、経路探索中だと思います。目的地へワープしたときにはfalseになります。

そこで、ワープ後に目的地を再設定するのでなく、保存したパスを設定するようにしてみました。

NavMeshPath path;

// ---
// 初めて目的地を設定するとき
path = agent.path; // パスを保存

// ---

second += Time.deltaTime;

if (second >= 3f)
{
    second = 0f; 
    Vector3 pos = corners[Random.Range(0, corners.Length)]; // ランダムで選んだコーナーポイントの位置
    agent.Warp(pos); // ワープさせる
    //agent.destination = goal.position; // ゴールを再設定する
    agent.path = path; // パスを設定
    Debug.Log(agent.pathPending + " " + agent.destination + " " + pos + " " + transform.position);
}

すると、目的地への移動が継続されながら、pathPendingがfalseのままになりました。trueになるのは、初めて目的地を設定するときだけでした。pathを設定するとその都度経路探索をしなくて済むようです。

コメントを残す

メールアドレスが公開されることはありません。