問題タブ [navmesh]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Unity 5.4 の「宛先の設定」はアクティブなエージェントでのみ呼び出すことができ、インスタンス化時の宛先が正しくありません
兵士をスポーンし、ナビ メッシュをマウスでクリックして連隊として移動させようとしています。しかし、「「宛先の設定」はアクティブなエージェントでのみ呼び出すことができます」というエラーが表示されます。これは、ナビゲーション メッシュから高または低にインスタンス化することによって引き起こされる可能性があることをフォーラムで読みました。しかし、y 軸上にスポーンポイントをどこに置いても、何も変わりません。私は通常 Y = 0 でそれらをスポーンします。Unity は、インスタンス化するときに私のプレハブ クローンを自動的に y = 0.303 に設定するようです...理由はわかりません。シーン ビューで実行時に y 軸の兵士を移動できません。もう 1 つの「楽しい」ことは、Awake で getComponent を呼び出しても、nav Mesh エージェントの割り当てられていない参照例外が発生することです。「宛先の設定」エラーに到達するには、別の関数で呼び出す必要があります。
c# - Unity - NavMeshAgent が複数のコーナーで機能しない
私は現在 Unity3D ゲームに取り組んでおり、ナビゲーション メッシュ エージェントでいくつかの問題が発生しました。私の現在の目的は、敵を最も近いプレイヤー (3 人になる予定) に向かって歩かせることです。敵をスポーンすると、どのプレイヤーが最も近いかをチェックします。これは、以下のコードに見られるように、プレーヤーに向かって残りの距離で行われます
このスニペットでは、距離は '<code>float.MaxValue' で開始され、(プレイヤーが現在の距離よりも近づくたびに、ゲームオブジェクトである '<code>playerToFollow' として設定されます。
問題はここにあります: プレーヤーへのパスに 0 または 1 つのコーナーがある場合。ナビゲーション メッシュ エージェントは、プレイヤーに向かってその道を歩き始めます。しかし…パスに複数のコーナーが含まれる場合は常に距離が計算されないため、 が返されagent.remainingDistance == float.PositiveInfinity
ます。
これは、距離 ( float.MaxValue
) が残りの距離 ( float.PositiveInfity
) より小さいことを意味します。
私が忘れる可能性のあるものはありますか?私にお知らせください。いつでも詳細をお知らせできます。
c# - エージェントを使用せずに OffMeshLink を検出する
私は NavMesh パスファインディング ソリューションを使用して AI を実行していますが、いくつかの制限があるため (彫刻されたオブジェクトが近づいたときにテレポートするなど)、NavMeshAgent を使用したくありません。
したがって、NavMesh.CalculatePath() のパス上で Rigidbody を移動して、ある種の融合を行いました。これは今のところ非常にうまく機能していますが、パス上の OffMeshLinks を検出するのに問題があります (Vector3 の単なる配列であるため)。
上記のように NavMesh.Raycast() を使用して少し「だます」ことができますが、常に機能しているわけではなく、1 つではない OffMeshLink を検出することもあります。
前もって感謝します :)
unity3d - コードでエディターモードでnavmeshを構築するためのクラスはUnityにありませんか?
以前は NavMeshBuilder でしたが、バージョン 5.5 ではそのようなクラスはありません。
エディター モードのコードで NavMesh をベイクするにはどうすればよいですか?
編集1
実行時に navmesh をベイクしたくありません。私がやりたいのは、NAVIGATION タブではなく、MY CODE を使用してエディター モード (プレイ モードではない) で navMesh をベイクすることだけです。まだ可能ですか?ナビゲーション メッシュを構築するメソッドを呼び出すだけです。
unity3d - NavMesh エージェントが無効なパスを計算する原因は何ですか?
問題の説明
NavMesh エージェントが無効なパスを計算するのに苦労していますが、明らかに理由はありません。この問題は、最初の有効なパスで既に移動しているときに時々発生します。
上の画像では、宛先は左上隅のコーンです。(NavMeshAgent の方向矢印は気にしないでください。エージェントを手で動かして「ロックを解除」しようとしました)
- インスタンス化されたら、エージェントに NavMesh 上の特定の宛先ポイントへのパスを計算するように依頼します( NavMesh.SamplePositionを使用して、宛先ポイントが NavMesh 上にあることを確認します)。すべて正常に動作します。エージェントは自分の道を見つけ、ターゲットに向かって動き始めます
- しかし、旅の最中に突然、最初のステップからNavMeshが変更されていない間に、彼は自分自身を失います。私は彼に何も尋ねていません。新しいパスの新しい計算もしていません。
テスト済みのソリューション
目的地が NavMesh 上にあることを確認しました
エージェントのエリア マスクをチェックして、NavMesh のさまざまなエリアにもかかわらず、エージェントが目的地へのパスを見つけられることを確認しました
エージェントのパスが無効かどうか、ほぼすべてのフレームをチェックします。
CalculatePath
その場合、またはを使用して新しいものを計算しSetDestination
ます。うまくいくこともあれば、うまくいかないこともあります。シーン全体ですべての NavMeshObstacle を無効にします (私のエージェントには NavMeshObstacle もその子にもありません)
初期位置と最終目的地の間にさらにステップを追加する
エージェントのAutoRepathプロパティを無効にしました
パスを計算し、すべてのコーナーを保存し、これと同様の方法を使用して一度に 1 つのコーナーでエージェントの目的地を設定します
注 : 別のエージェントが最初のエージェントをプッシュすると、後者が起動してパスを見つけたように見えます。
c# - NavMesh に十分に近くないため、エージェントの作成に失敗しました
ナビゲーション メッシュ エージェントを動的に作成するサード パーティ製のパッケージがあります。しかし、作成時にこの警告が表示されます
NavMesh UnityEngine.Object:Instantiate(GenericIndividual) STB.PACS.GenericIndividualPoll:.ctor(GenericIndividual) (Assets/STB/PACS/Source/System/GenericIndividualPoll.cs:48) に十分に近くないため、エージェントの作成に失敗しましたSTB.PACS.IndividualPath:Start() (Assets/STB/PACS/Source/Sys で)
以下にいくつかの画像を示します。