ゲームの「香りの軌跡」をどのようにモデル化できますか?


11

3Dゲームを作成し、プレーヤーまたはモバイルのいずれかが、香りの道をたどることによって他のエンティティを引き寄せられるようにしたいとします。このユースケースに一致する既知のデータ構造はありますか?

個人の数が少ない場合は、3D coordからエンティティIDへのマップのような処理を行うことができますが、実際の香りは時間とともに徐々に消えていきます。そして、ほとんどの場合、そこに何が入ったか、そしてそのタイプのものがいくつくらい入ったかしか知ることができません。そして、それがなくなるまで、近似は時間とともに最悪になります。

正確な数値から始めて、最下位の桁を徐々に減らしていき、最上位の桁も失うまでのようなものだと思います。しかし、エンティティIDは通常、個別のIDに加えてエンティティタイプを含むようにエンコードされないため、これは本当に役に立ちません。


ドワーフフォートレスは次のリリースでそのようなことをしています。
ラッセル

回答:


10

これを実行する方法にはさまざまな種類があります。「自明」の選択肢を提案しますが、設計できるバリエーションはたくさんあります。免責事項:私は実際にこのようなものを実装していません。

まず、自分の世界をカバーするデータ構造が必要です。3D空間でNPCの動きをしている場合は、パスファインディング用のそのような構造(ナビゲーションメッシュなど)がおそらくあるか、最終的に必要になります。では、香りのフィールドを追加できるとしましょう。

では、その分野には何を入れますか?記録(香り強さ時間)のリストを提案します。このリストは最大長以下に保持され、強度でソートされているため、弱い香りは破棄されます。香りは、明示的に、各エンティティまたはエンティティタイプに対して定義されたいずれかのものになるか、またはそれは単にエンティティタイプかもしれない-あなたは明らかに追跡できるようにしたいものに応じて。時間は、この香りレコードが最後に更新されたときのタイムスタンプです。

エンティティがエリア(ナビゲーションメッシュの特定の三角形など)を通過するときは、香りリストを更新します。最初に、時間の値と現在の時間に応じて経過した時間の量に応じて、すべての強度を減らします。ここでは、指数関数的減衰がおそらく妥当な選択です。次に、現在のエンティティの香りをリストに追加します。強さはエンティティタイプに依存している可能性があります。次に、リストが長くなりすぎた場合は、最も低い強度を破棄します。

追跡結果を取得するには、現在の場所のリストで香りを見つけ、そのすべての近隣について同じことを行い、最も強い香りの方向に進みます(つまり、トラッカーが来た方向ではありません)。

よりリアルに:

  • 拡散:各場所の香りの一部を定期的に隣人に転送します。これはトレイルを混乱させるだけでなく、静止しているもの(食品、死体などを見つける)を盗聴できることも意味します。(このタイプの情報に完全に基づいてアクションを実行することは、認識されている種類のAIでもあります。ランドスケープは、特定のリソースを取得するための方法などの情報を提供します。主な欠点は、費やされる時間です。どこでも拡散を計算します。

  • 強い香りは弱い香りの検出を防ぐはずです。求める香りの強さを最も強い香りの強さで割り、小さすぎると失敗します。これは意図的に自分の香りの道を混乱させる可能性があります。


9

香りのマップを作成するために、インフルエンスマッピングと呼ばれる手法を変更します。それは自然に消えて消え、他の香りと混じり合い、そしておそらくそれ以上に香りを増します。これは、必要なことを正確に実行するように聞こえますが、実装しようとしているものよりも複雑な場合があります。少なくともそれはあなたにいくつかの良いアイデアを与えるはずです、そしてあなたが現在使用しているどんな構造の上に実装することもかなり簡単です。

参考になったチュートリアル/説明。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.