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