このエラーは、NavMeshAgent が配置されているノードがパス検索グリッド上に配置されていないことを示します。通常、このエラーには次のような問題が伴います。
「NavMesh に十分近くないため、エージェントを作成できませんでした」のような警告。
これは、経路探索エージェントの作成が失敗し、その後の宛先の設定が確実に失敗することを示しています。
このような問題をチェックする必要があります。
- SetDestination を呼び出すときに NavMeshAgent が有効かどうか
- NavMeshSurface は存在しますか?
すべてが正しく設定されているにもかかわらず、このエラーが報告される場合。おめでとうございます。私も同じ問題に遭遇しました~
私はエディターやテスト APK でこのエラーに遭遇したことはありません (もし遭遇したなら、解決方法を見つけたはずです~)。そして、プロジェクトが立ち上げられたとき、このエラーが大量にバグとして報告されていることがわかりました。とても困惑しましたが、幸いにも NavMeshAgent のソース コードを見つけて、間違いを避けるためのもう少し安全な方法を見つけました。
Agent の経路探索で最も重要な機能の 1 つは障害物回避機能であり、Unity はグループ迂回マネージャー (Detour Crowd Manager) を使用して Agent を管理します。SetDestination を呼び出すことができるという前提は、エージェントがこのバイパス マネージャーに追加されていることです。追加動作をトリガーするには、いくつかの方法があります。
- NavMeshSurface の変更 (障害物が穴を掘るなど) がこの動作をトリガーします。
- NavMeshAgent::OnEnable は追加を試みます
- NavMeshAgent::Warp を呼び出すと追加されます
最初のトリガー動作は経路探索グリッドを変更する必要があり、2 番目はシステムによって呼び出され、最後のトリガー動作は自分でトリガーできます。
ここで、エージェントが配置されているトランスフォームを、transform.position を直接使用するように設定しているかどうかを確認できます。
その場合は、transform.positionで座標を変更する方法を、agent.Warpを使用して変更すると扱いやすいです。
このようにして、迂回システムを追加しながら、変換の座標も変更されます。
なぜそうなるのかというと、Detour Crowdを初めて追加するときに失敗したのではないかと思いますが、デバッグができないなど失敗の理由はいろいろあるので、このような推測しかできません。この追加動作を再度トリガーしないと、後続のエラーが発生します。ただし、少なくとも、ワープを使用して座標を直接設定すれば、間違いがないことが保証されます。