Page 1 of 1
ServiceとActionBehaviorの違いについて
Posted: 2023/07/19 13:41
by Keitaro
非常に基礎的な質問で申し訳ないのですが、BehaviorTreeにおけるServiceとActionBehaviorの違いがドキュメントを読んでも、実際に動かしてみてもよくわかりませんでした。
用途や挙動にどういった違いがあるのか、簡潔にご説明いただけるとありがたいです。
すいませんが、よろしくお願いいたします。
Re: ServiceとActionBehaviorの違いについて
Posted: 2023/07/19 23:32
by caitsithware
ServiceとActionBehaviourの違いについてですね。
主な違いは以下の通りです。
ActionBehaviour
- アクションノード(いわゆるツリー構造のリーフ部分)でのみ使用可能。
- 1アクションノードに必ず一つだけActionBehaviourが必要。
- FinishExecuteメソッドを使用するとノードの実行を終了し親ノードに結果を返すことができる。
Service
- アクションノードとコンポジットノードのどちらでも使用可能。
- Serviceを追加しているノードがアクティブである間実行され続ける(コンポジットノードに設定した場合は、子ノードが実行中の間も実行される)
- Serviceはノードに0個以上の複数個追加できる。
- ノードの実行結果に直接作用させることができない(FinishExecuteメソッドが使えない。パラメータやデータ出力を介して間接的に他ノードの挙動を変えることはできる)
例
例えばステルスゲームの敵がプレイヤーを見つけて追いかける例を考えてみます。
- 追跡アクション : 「パラメータ:攻撃対象の位置」まで移動する。移動完了したら成功を返す。
移動中に「パラメータ:対象発見フラグ」がオフなら(つまり見失ったら)失敗を返す。
- 対象監視サービス : 一連の追跡行動を行うSequencerコンポジットノードに追加する。
攻撃対象を監視し、自オブジェクトから対象が見えている限り「パラメータ:攻撃対象の位置」を更新する。
攻撃対象が見えなくなったら「パラメータ:対象発見フラグ」をオフにする。
このような感じです。
この例はあくまで一例で、ゲームの規模によってはActionBehaviourとServiceを分ける必要性がない場合もあると思います。
これ以外の用途でも使える場面はあると思いますので、いろいろ試してみてください。