Page 1 of 1
よく使われる例の詳細の要望
Posted: 2024/08/11 01:54
by hatena
まだこちらのツールを使い始めたての為、マニュアルなどを見ながら試しているところです。
その中で、マニュアルの「はじめに」->「概要」->「4つの流れ」->「ビヘイビアツリー」にある敵モンスターの挙動のツリー構造のキャプチャが実装したい処理にとても近かったため、参考にしてツリーを組み立てようとしましたがどの機能を使っているか分かりませんでした。
個人的に特に知りたいのはFoundPlayerの部分がどう実現されているのか気になりました。
このサンプルは想定されるよく使われる機能として載せていると思われますので、是非こういった一連の流れの詳細を希望します。
最近サンプルの「Roll a Ball」が追加されたことを確認しました。
これからも色々サンプルやチュートリアルを追加していく途中かと思いますので、もし急かす形になってしまいましたら申し訳ございません。
Re: よく使われる例の詳細の要望
Posted: 2024/08/11 02:15
by caitsithware
ご意見ありがとうございます。
マニュアルの概要についてはひとまず説明のために用意したイメージ図のようなもので、現時点では実際に動作し再配布可能なサンプルやチュートリアルは用意できておりません。
イメージ図にあるFoundPlayerについては「プレイヤーを見つけたかどうかを格納するbool型の変数」です。
そこでは概要説明のため、どのようにプレイヤーを見つけたと判断するかについては触れていません。
レイキャストや一定範囲内にいるかどうかなどの判定を繰り返し行うなど、作成したい挙動に合わせていろいろ試してみてください。
また、Roll a Ballのチュートリアルについては現在執筆中です。
今後もサンプルやチュートリアルの追加も開発作業の合間に順次行ってまいります。
なにしろワンマン作業ですので、気長にお待ちいただけると助かります。
Re: よく使われる例の詳細の要望
Posted: 2024/08/11 09:13
by hatena
回答ありがとうございます。
チュートリアルの追加などお待ちしています。
FoundPlayer部分に関して可能な範囲で少しお聞きしたいことがあります。
(この質問への対応はお手すきの時で構いません)
敵オブジェクトに例えばUnityの標準的なEnemyスクリプト(MonoBehaviour)を付与し、その中で索敵範囲(衝突判定)処理を入れ、プレイヤーを発見した時にOnTriggerStay内でFoundPlayer(bool型の変数)の真偽値を変えたい、もしくは変わったことを検知してツリーの後続へ処理を進めたい場合はどのようにすれば実現できそうでしょうか?
大まかな方法やおそらくこうすれば出来そうという提案だけでも大丈夫です。
考え方がそもそも間違っているのかどうかが知りたいです。
Logic Editor上で作成したBlackBoardのbool変数へのアクセスが分かっていない状態です。
ロードマップにある「ルートBlackboardへの外部アクセス」が関係していて実現されるまで出来なかったりするのでしょうか?
Re: よく使われる例の詳細の要望
Posted: 2024/08/11 10:34
by caitsithware
C#スクリプトからグラフの挙動を変えたい場合は、直接グラフ関連のメンバーを呼び出すか、C#のeventやUnityEventを用意しメンバーアクセスのスクリプト生成機能を介してEventComponentで待ち受けるかのいずれかです。
メンバーを直接呼び出す場合はC#のコーディング知識が必要です。
変数の値を設定する場合は、対象の
LogicBehaviorや
LogicPlayer→
LogicController→
Blackboard→
TryGetVariable→
TrySetValue<T>という順番でアクセスすると設定できます。
詳細はスクリプトリファレンスや同梱している内部コードを参照してお望みの機能を実装してください。
もしC#の書き方などがわからない場合はアセットサポートの範疇を超えますので、ここでは個別にお答えできません。
書籍などでの学習をお勧めいたします。
C#のeventやUnityEventを介す場合は、スクリプトにeventやUnityEventを宣言して任意のタイミングで呼び出すコードを作成(asmdefでアセンブリも適切に設定)すると、ノード選択メニューのMembersタブからそのeventを参照できます。
使用すればeventが呼ばれた際に実行するノードが作成できるようになり、そこからFoundPlayerの変更が行えます。
同じ方式のPubOnTriggerEnterやPubOnTriggerStayなどのスクリプトも同梱していますので参考にしてみてください。
私個人の考えとしては、後者の方法を推奨します。
たとえばLogicToolkitに依存しない「センサー機能」のようなスクリプトを別途作成し、C#のeventやUnityEventを介してLogicToolkitのグラフ側でイベントを待ち受ける方式です。
機能が分離しており明確化できますので、あとでのデバッグもしやすくなるかと思います。
好みや場合によりけりですが、ひとつの参考になれば幸いです。
hatena wrote: ↑2024/08/11 09:13
ロードマップにある「ルートBlackboardへの外部アクセス」
こちらは「グラフから別グラフの変数を参照したり変更したりもできたほうが良いな~」という計画ですね。
スクリプトからの直接/間接的なアクセスは現バージョンでも可能です。