Page 1 of 1

DecoratorのInvertResultが機能しない(?)件について

Posted: 2021/07/28 14:34
by aaaaa
初歩的な質問で失礼します。
ビヘイビアツリーについて、オリジナルデコレーターを実装しています。
可読性的な設計上の理由により、基本的にfalseを返すようになっています。
InvertResultというビルトインのデコレーターによってそれをtrueとして扱って下層の処理に向かってほしいのですが、処理を下まで通してくれません。

一応オリジナルの方で(false)を返していて、InvertResultの方で(true)になっていることは確認できているのですが、処理は通りません。
またInvertResultのリファレンスが検索しても出てきません。

Decoratorの仕様は一つでもfalseがあると通らないようなものでしょうか?
InvertResultはどのように使えばいいでしょうか?

Re: DecoratorのInvertResultが機能しない(?)件について

Posted: 2021/07/28 23:05
by caitsithware
ご利用ありがとうございます。
aaaaa wrote: 2021/07/28 14:34 InvertResultというビルトインのデコレーターによってそれをtrueとして扱って下層の処理に向かってほしいのですが、処理を下まで通してくれません。

一応オリジナルの方で(false)を返していて、InvertResultの方で(true)になっていることは確認できているのですが、処理は通りません。
InvertResultは自身のノードの実行結果(ActionBehaviour.FinishExecuteで指定する引数あるいはCompositeNodeの処理結果)を反転し、親ノードへ伝えるためのものとなっております。

たとえば攻撃対象を探すアクションがあり、見つかったら成功(true)ないなら失敗(false)を返す場合、親のCompositeNodeがSequencerで攻撃対象が"ない"場合に弟ノードへ移りたいときに攻撃対象を探すアクション側にInvertResultをつける感じです。
(あくまで例でありこういう造りが良いかは別の話です)
aaaaa wrote: 2021/07/28 14:34 またInvertResultのリファレンスが検索しても出てきません。
今試しにドキュメント内右上の検索枠からInvertResult名指しで検索してみましたが出てきているようです。
検索ワードによっては出てこないかもしれませんが検索ライブラリの都合によるため改善できないかもしれません。
またGoogleなどの検索サービスでの検索の場合、出てくるかどうかは確証できません。
この辺りはご了承ください。

InvertResultのリファレンスはこちらです
https://arbor-docs.caitsithware.com/ja/ ... esult.html
aaaaa wrote: 2021/07/28 14:34 Decoratorの仕様は一つでもfalseがあると通らないようなものでしょうか?
複数のOnConditionCheck()の戻り値が全てtrueの場合に自ノードを実行する仕様となっております。

欲しい機能としては、全ConditionCheck後の結果を反転するDecoratorや、Decoratorに条件反転するフラグを直接持たせるといった感じでしょうか。
今現在そのような機能はありませんので、要望として今後導入するか検討したいと思います。
現状では自作するデコレータに個別に条件反転フラグを付ける等の実装をするようお願いいたします。

Re: DecoratorのInvertResultが機能しない(?)件について

Posted: 2021/07/30 02:53
by aaaaa
早速のご回答ありがとうございます!
なかなか使い始めで理解が足りていなかったのですが、仕様全体の理解にもつながるご回答いただけてとてもありがたいです。
今後ともよろしくお願いいたします。