これを実行する方法にはさまざまな種類があります。「自明」の選択肢を提案しますが、設計できるバリエーションはたくさんあります。免責事項:私は実際にこのようなものを実装していません。
まず、自分の世界をカバーするデータ構造が必要です。3D空間でNPCの動きをしている場合は、パスファインディング用のそのような構造(ナビゲーションメッシュなど)がおそらくあるか、最終的に必要になります。では、香りのフィールドを追加できるとしましょう。
では、その分野には何を入れますか?記録(香り、強さ、時間)のリストを提案します。このリストは最大長以下に保持され、強度でソートされているため、弱い香りは破棄されます。香りは、明示的に、各エンティティまたはエンティティタイプに対して定義されたいずれかのものになるか、またはそれは単にエンティティタイプかもしれない-あなたは明らかに追跡できるようにしたいものに応じて。時間は、この香りレコードが最後に更新されたときのタイムスタンプです。
エンティティがエリア(ナビゲーションメッシュの特定の三角形など)を通過するときは、香りリストを更新します。最初に、時間の値と現在の時間に応じて経過した時間の量に応じて、すべての強度を減らします。ここでは、指数関数的減衰がおそらく妥当な選択です。次に、現在のエンティティの香りをリストに追加します。強さはエンティティタイプに依存している可能性があります。次に、リストが長くなりすぎた場合は、最も低い強度を破棄します。
追跡結果を取得するには、現在の場所のリストで香りを見つけ、そのすべての近隣について同じことを行い、最も強い香りの方向に進みます(つまり、トラッカーが来た方向ではありません)。
よりリアルに:
拡散:各場所の香りの一部を定期的に隣人に転送します。これはトレイルを混乱させるだけでなく、静止しているもの(食品、死体などを見つける)を盗聴できることも意味します。(このタイプの情報に完全に基づいてアクションを実行することは、認識されている種類のAIでもあります。ランドスケープは、特定のリソースを取得するための方法などの情報を提供します。主な欠点は、費やされる時間です。どこでも拡散を計算します。
強い香りは弱い香りの検出を防ぐはずです。求める香りの強さを最も強い香りの強さで割り、小さすぎると失敗します。これは意図的に自分の香りの道を混乱させる可能性があります。