• 追加された行はこの色です。
  • 削除された行はこの色です。
#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]
** ビヘイビアツリー [#x5ff680b]
* イベントテーブル [#bf60988d]
- 条件の状態値、イベント定義Actorの「TaskActor」をテーブル化している。
- EventManagerで、クエリーが送られてきたら検索してヒットしたデータを返す。

** 強制的なイベント [#qae3db9a]
* ビヘイビアツリー [#x5ff680b]
- イベント毎に複数のBehaviorTreeを作る想定していたので、取り回ししやすいように各動作毎にタスク化した。

* 強制的なイベント [#qae3db9a]
- 通常の状態値から検索するイベントとは別に、特定のタイミングで強制的に発生するイベントの仕組みも作った。
-- 今回は、開始時のおかえりなさい、就寝、起床。
- こちらは通常のイベントテーブルとは別にテーブルを持ち、発生タイミングは別途GameMode等から一定タイミングでクエリーを投げている。


* ほか [#zb891648]
** 扉を開ける [#bcba4e28]
面倒臭かった。いい方法知ってたら教えて下さい。
+ BehaviorTreeのMoveToと同時に動くようにチェック用のサービスを回す。
+ ヒットした先が扉+閉じられていた場合、MoveToの移動先を「扉を開ける為の回避場所」にして、扉を開けられるように。
-- 扉を開ける為の回避場所:ドアActorに仕込んでおいた。
+ 扉開ける
+ MoveToを元の移動先に戻す。

** MoveToの一時中断 [#z7d310f3]
デコレーターのCoolDownで中断させると、MoveToが一瞬途切れて動きがカクカクなってしまう。
という事で、Blackboardのbool値を監視してMoveToを中断させるタスクを用意した。



    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS