![](https://www.ame-name.com/wp-content/uploads/2020/07/warpB1.gif)
前の記事のスクリプトで、ナビメッシュエージェントに目的地への経路上でワープさせてみます。
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秒ごとに、ランダムで選んだコーナーポイントへワープさせます。すると、ワープ後にナビメッシュエージェントがその場を動かなくなりました。
![](https://www.ame-name.com/wp-content/uploads/2020/07/warpB2.gif)
コンソールを見ると、目的地がワープさせた地点に変更されています。Warp()を呼んだフレームでナビメッシュエージェントはワープ先に移動していて、経路探索も終わっているようです。
![](https://www.ame-name.com/wp-content/uploads/2020/07/WS001408.jpg)
ワープ後に目的地を再設定してみると、冒頭のGif画像のように、ナビメッシュエージェントが目的地への移動を継続するようになりました。この場合はpathPendingはtureなので、経路探索中だと思います。目的地へワープしたときにはfalseになります。
![](https://www.ame-name.com/wp-content/uploads/2020/07/WS001409-1.jpg)
そこで、ワープ後に目的地を再設定するのでなく、保存したパスを設定するようにしてみました。
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);
}
![](https://www.ame-name.com/wp-content/uploads/2020/07/warpB3.gif)
すると、目的地への移動が継続されながら、pathPendingがfalseのままになりました。trueになるのは、初めて目的地を設定するときだけでした。pathを設定するとその都度経路探索をしなくて済むようです。
![](https://www.ame-name.com/wp-content/uploads/2020/07/WS001410.jpg)