@davidluzgouveiaが匿名の投稿にコメントしたことから判断して、プロジェクトを立ち上げます。ただし、パスの追跡とパスの検索は非常に異なります。経路発見は、匿名で投稿されたものの詳細であり、経路発見についてはダイクストラのアルゴリズムを調べます。パスを追跡するために、選択した物理エンジンを完全に使用します。私がそれを設定する方法は、ユニットクラスが移動するそれぞれの場所が2Dオフセットを介してパスサブクラスに設定されることです。はい、それらは3Dではなく2Dです。
3Dの説明:
各ユニットには、地形およびワールドオブジェクトとの衝突専用に設定されたメインコライダーが1つしかありません。カプセル形状で、プログラム的に言えば半径と高さがあります。モデルの中心に構築されており、モデルの前面と上部を超えて拡張する必要があります。しかし、常に地面からどれだけ離れているかについての表面オフセットと、一度にわずかに跳ね上がる前にどれだけ滑らせることができるかというフロートもあります。これは、地形の衝突の問題に対してなんらかの修正を適用しているようですが、理由があります。
とにかく、このカプセルオブジェクトに力を加えて、常に地面の上でホバリングし続ける必要があります。それはそれがそれ以上高くなることができないと言うことではなく、単にそれが低くなることができないということではありません。ホバリングする必要がある理由は(私の場合)、剛体とラグドール物理エンジンでは、ユニットの脚が手続き的にアニメーション化されるためです。したがって、カプセルに単純な力を加えることで、私のエンティティの脚は自分自身で再配置されます。また、個別の重力アプリケーションもあります!これにより、キャラクターが傾斜している場合、片方の足がもう片方の足よりも低い高度になります。
これは、まさにその方法です。あなたがそれを求めていることから判断すると。いくつかの機能を省略したい場合は、特にRTSまたはFPSであり、ユニットフィートが表示されたりケアされたりしない場合は特に問題ありません。しかし、一般的に、ユニットには、キャラクターの動きとほぼ排他的に機能する1つのMAINコリジョンオブジェクトが必要です。
具体的には、2D:
エンジンがユニットを動かすために動かすための主要なポイント、または何らかの基準が必要です。各ユニットに、移動する必要がある場所がいくつかあるパスサブクラスを指定し、レベルコードで指定することができます(たとえば、location1(x、y)location2(x、y)など)。 「作業しているゲームの種類がわからない)は、おそらくレベル内の場所を指定し、各ユニットがレベルで指定された順序でそれらを処理し、各場所に到達した後、希望の場所に置き換えます次のものが必要です。
すべてのユニットが同じ場所に行く必要はないことを意味するので、各ユニットの最初の場所に場所のリストを持っているなど、それを修正できる方法はたくさんあります。ただし、同じ方法で、レベルコードでもこれを行うことができます(unit1.location1(x、y)unit1.location2(x、y)grunt.l1(x、y)knight.loc3(x、y)なんでも)
ほんの少しのアイデア!3Dバージョンは、関連性がはるかに低いものの、読むことをお勧めします。
編集:私はこれを読む可能性のある人に両方を提供することにしました(そうです)。