UE4.10.4
親ページ:第5回UE4ぷちコン
シミュレーション的なイベント駆動はUE4以外も含めて初めて作ったので手探り。
思考処理フロー †
BehaviorTreeをイベント毎に切り替えて挙動させる。
- 「GrayちゃんActor」とは別に、「EvenManager」としてイベントテーブル(後述)を管理するActorを用意。ワールドに1つ。
- 現在の「状態(何やりたいかパラメーター)」は「GrayちゃんActor」が保持
- 「TaskActor」がイベントの定義。「本を読む」や「TVを見る」などの単位でActor化。
- Grayちゃんの動きパターンは全て、「TaskActor」の中にある「BehaviorTree」で記述。
- BehaviorTree内で次のイベントに遷移してもOKなタイミングで、状態を更新+「EventManager」に条件に合致するイベント検索クエリーを投げる
- 次に遷移できるイベントが見つかれば、現行の「TaskActor」を破棄、新しい「TaskActor」をGrayちゃんに登録する。
- 新しい「TaskActor」のBehaviorTreeを起動させる
イベントテーブル †
- 条件の状態値、イベント定義Actorの「TaskActor」をテーブル化している。
- EventManagerで、クエリーが送られてきたら検索してヒットしたデータを返す。
- イベント毎に複数のBehaviorTreeを作る想定していたので、取り回ししやすいように各動作毎にタスク化した。
強制的なイベント †
- 通常の状態値から検索するイベントとは別に、特定のタイミングで強制的に発生するイベントの仕組みも作った。
- こちらは通常のイベントテーブルとは別にテーブルを持ち、発生タイミングは別途GameMode等から一定タイミングでクエリーを投げている。
ほか †
扉を開ける †
面倒臭かった。いい方法知ってたら教えて下さい。
- BehaviorTreeのMoveToと同時に動くようにチェック用のサービスを回す。
- ヒットした先が扉+閉じられていた場合、MoveToの移動先を「扉を開ける為の回避場所」にして、扉を開けられるように。
- 扉を開ける為の回避場所:ドアActorに仕込んでおいた。
- 扉開ける
- MoveToを元の移動先に戻す。
MoveToの一時中断 †
デコレーターのCoolDownで中断させると、MoveToが一瞬途切れて動きがカクカクなってしまう。
という事で、Blackboardのbool値を監視してMoveToを中断させるタスクを用意した。