ビヘイビアツリー:: 1ティック以上かかるアクション


19

私がビヘイビアツリーで理解していることから、各ビヘイビアは、数回の反復で実行できる短い目標指向のアクションである必要があります。

したがって、たとえば、以下はビヘイビアツリーの画像です。

ここに画像の説明を入力してください

ここで、Drive To Enemyの動作には、ツリー内で数回以上の反復が必要であると想定しましょう。そのため、各パスでDrive To Enemyが呼び出されるのは、現在実行状態になっいるためです。

問題は、敵が近くにいる場合、Evade Enemyに電話したいことです。Drive To Enemyが常に呼び出されること考慮すると、Evade Enemyを呼び出す機会はありません(おそらく、Enemyを避ける必要があります)。

  • 万一私はツリーを横断し、各アクションが現在実行されているものに関係なく渡しますか?
  • 私はこれについて正しい方法で行っていますか?
  • そのような動作を処理する適切な方法は何ですか?

もともとStackoverflowで尋ねられました。ここで考えたほうが、この質問をするのに適した場所です。


1
ここで提供される答えは役立ちますか?gamedev.stackexchange.com/questions/51693/...
テトラッド

それも私の質問です。この質問をコメントとして投稿するつもりでしたが、別の質問にすべきだと思いました。
無料のランサー

回答:


16

以前の回答で提供した画像を参照してください。

ここに画像の説明を入力してください

ノード1が 'Evade Enemy'で、ノード2が 'Chase Enemy'であると想像すると、2番目の反復( '2'と 'B'を除くすべてが緑色の場合)が2番目の反復でも開始)、「Evade Enemy」がまだ最初にチェックされます。近くに敵がいないため、「Evade Enemy」が失敗した場合のみ、「Chase Enemy」が再びアクティブになります。「Chase Enemy」に再びアクセスすると、「Chase Enemy」が「running」状態にあることがわかり、「B」に直接スキップします。

これは、ツリーがチェックされるたびに、常に左から右に移動することを意味します。ノードが実行中としてマークされている場合でも、優先度の高いノードが最初にチェックされます。

ノードを右から左に処理する意味があるかどうかはわかりませんが、ノードを配置するように見えます(つまり、敵を回避し、敵をドライブの右側に反対方向に配置します)。さらに説明が必要な場合は、チャットまたはトピックに関する既存の質問のいずれかで質問する必要があります。


2
別の素晴らしい説明をありがとう。ビヘイビアツリーの再帰的な性質を理解するのに苦労していました。最後の質問のコメントでお尋ねするつもりでしたが、コメントを長いQAにしたくありませんでした。最後の質問ですが、これは今ではすべて理にかなっています。実行状態の処理にセレクターとシーケンスに違いはありますか?セレクター(ノード0)は最初にノード1をチェックし、「ノード2」シーケンスは2回目の反復でノードAをチェックしなかったようです。
無料のランサー

4
良い質問です、あなたはそれを得ていると思います。ノード2はノードAが完了したため、ノードAをチェックしませんでした。ノード2が「実行中」としてマークされると、ノードBが現在実行中のノードであることに注意します。ノードが実行されている場合、以前のノードを再度チェックする必要がないことを想定できます。
マイケルハウス

ルートセレクター(0)を、最初の反復後に「実行中」に設定した後、「準備完了」にリセットしますか?
無料のランサー

実行中のノードの親だけが実行中に設定されていると思います。ノード(1)を再度解析する必要があるため、ルートを実行する代わりに準備完了に設定する必要があります。
マイケルハウス

3
それは一つのオプションです。実際には、必要に応じて頻繁または頻繁に更新することができます。必要に応じて300ミリ秒ごと、またはすべてのフレーム。または、イベントを処理するための修正された更新とトリガーされた更新を行うことができます。このようなほとんどの構造と同様に、動作ツリーは厳密に定義されていません。これらは、ゲームで可能な限り最適な方法で使用する必要があります。すべてのフレームを評価するのが無駄すぎる場合は、それをしないでください。また、ツリーの評価に費やす時間を制限し、必要に応じて次のフレームを選択することもできます。たくさんのオプションがあります。
マイケルハウス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.