ServiceとActionBehaviorの違いについて

Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。

Forum rules
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。
Keitaro
Posts: 5
Joined: 2022/06/10 12:44

ServiceとActionBehaviorの違いについて

Post by Keitaro »

非常に基礎的な質問で申し訳ないのですが、BehaviorTreeにおけるServiceとActionBehaviorの違いがドキュメントを読んでも、実際に動かしてみてもよくわかりませんでした。
用途や挙動にどういった違いがあるのか、簡潔にご説明いただけるとありがたいです。

すいませんが、よろしくお願いいたします。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: ServiceとActionBehaviorの違いについて

Post by caitsithware »

ServiceとActionBehaviourの違いについてですね。

主な違いは以下の通りです。

ActionBehaviour
  • アクションノード(いわゆるツリー構造のリーフ部分)でのみ使用可能。
  • 1アクションノードに必ず一つだけActionBehaviourが必要。
  • FinishExecuteメソッドを使用するとノードの実行を終了し親ノードに結果を返すことができる。
Service
  • アクションノードとコンポジットノードのどちらでも使用可能。
  • Serviceを追加しているノードがアクティブである間実行され続ける(コンポジットノードに設定した場合は、子ノードが実行中の間も実行される)
  • Serviceはノードに0個以上の複数個追加できる。
  • ノードの実行結果に直接作用させることができない(FinishExecuteメソッドが使えない。パラメータやデータ出力を介して間接的に他ノードの挙動を変えることはできる)

例えばステルスゲームの敵がプレイヤーを見つけて追いかける例を考えてみます。
  • 追跡アクション : 「パラメータ:攻撃対象の位置」まで移動する。移動完了したら成功を返す。
    移動中に「パラメータ:対象発見フラグ」がオフなら(つまり見失ったら)失敗を返す。
  • 対象監視サービス : 一連の追跡行動を行うSequencerコンポジットノードに追加する。
    攻撃対象を監視し、自オブジェクトから対象が見えている限り「パラメータ:攻撃対象の位置」を更新する。
    攻撃対象が見えなくなったら「パラメータ:対象発見フラグ」をオフにする。
このような感じです。
この例はあくまで一例で、ゲームの規模によってはActionBehaviourとServiceを分ける必要性がない場合もあると思います。
これ以外の用途でも使える場面はあると思いますので、いろいろ試してみてください。
Post Reply