2017-12-21 19 views
0

私は床に(丘や物を使って)NavMeshを持ち、NavMeshAgentを持っている私の "兵士は立っています"(私はテーブルトップのwargameを複製しています)です。すべてがうまく機能しますが、エージェントは上り坂に行くと縦にとどまり、一人でOKですが、たとえばタンクでは意味がありません。空気中の浮動小数点の半分と他の半分丘地形に接するNavAgent

の内側にこれは一例です。

enter image description here

はゲームオブジェクトがNavMeshの接線であることを確認する方法はありますか?垂直軸はエージェントの中心点などのNavMeshの法線に従う必要があります。正直言って私が気づくべき最初の人ではないと思うが、私は解決策を見つけることができなかった。

+0

私は、navmesh.samplepositionがNavMeshHit構造体に通常のデータを追加しない、またはnavmeshhesのデータ定義に基づいていないと考え始めました。通常のデータを追加することは、関数の宣言にも直感的に反しているようです。 –

答えて

0

これはハックのように思えるが、あなたのロボットのnavmeshにレイキャストでき、あなたはあなたのタンク/ロボットを回転させるためにrayhitの法線を使うことができます。

navmeshするレイキャスティング:https://answers.unity.com/questions/325929/raycasting-on-navmesh.html

を次にヒット面の法線方向に基づいて、ロボットを回転させるためにこれを使用する:

tranform.rotation = Quaternion.FromToRotation(Vector3.up, rayhit.normal); 

これで始まるしても大丈夫な拠点です。さらに多くのレイキャストを追加して、より付加的な/正確なローテーションを得ることができます。たとえば、あなたのロボットに4本のタイヤがある場合、各線はそれらの点から発射されます。

+0

ここからどこにレイキャストしますか?ロボットの中心からどこに?地形の最も近い点のようなもの?そして、どうして...あなたはnavmeshに対してしかレイキャストしたくないと指定しているのですか?( – javirs

+0

私はどこからレイキャストしたらいいのかわからなかったので、代わりにNavMesh.SamplePositionを試しました。ロボットとメッシュとの接触はありませんが、距離は0であるため、ヒットします。ノーマルは(0,0,0)..他の解決策ですか? – javirs

+0

ええ、申し訳ありませんが、私は銃を飛ばしましたここで私は法線を使ってさらにテストをしていますが、それを働かせるようには思えません。通常のもの以外のすべてのプロパティを得ることはできますが、メッシュ上の実際のコライダーの代わりにnavmeshにレイキャストする必要がありますので、通常のPhysics.raycastだけを試してみてください。 –

関連する問題