Top > 第5回ぷちコン-イベント管理、AI周り

UE4.10.4
親ページ:第5回UE4ぷちコン

シミュレーション的なイベント駆動はUE4以外も含めて初めて作ったので手探り。

思考処理フロー

pc05-Event01.png
BehaviorTreeをイベント毎に切り替えて挙動させる。

  • 「GrayちゃんActor」とは別に、「EvenManager」としてイベントテーブル(後述)を管理するActorを用意。ワールドに1つ。
  • 現在の「状態(何やりたいかパラメーター)」は「GrayちゃんActor」が保持
  • 「TaskActor」がイベントの定義。「本を読む」や「TVを見る」などの単位でActor化。
  • Grayちゃんの動きパターンは全て、「TaskActor」の中にある「BehaviorTree」で記述。
  1. BehaviorTree内で次のイベントに遷移してもOKなタイミングで、状態を更新+「EventManager」に条件に合致するイベント検索クエリーを投げる
  2. 次に遷移できるイベントが見つかれば、現行の「TaskActor」を破棄、新しい「TaskActor」をGrayちゃんに登録する。
  3. 新しい「TaskActor」のBehaviorTreeを起動させる

イベントテーブル

pc05-Event_Table01.pngpc05-Event_Table02.png

  • 条件の状態値、イベント定義Actorの「TaskActor」をテーブル化している。
  • EventManagerで、クエリーが送られてきたら検索してヒットしたデータを返す。

ビヘイビアツリー

pc05-Event_BT01.png

  • 「本を読む」「TVを観る」等のイベント毎にBehaviorTreeを作成。

pc05-Event_BT02.pngpc05-Event_BT03.png
pc05-Event_BT04.pngpc05-Event_BT05.png

  • 各イベントで取り回ししやすいように、移動、見られた等のアクション毎にタスク化した。
    大本のイベントからこれらを呼び出すように。

強制的なイベント

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

ほか

扉を開ける

面倒臭かった。いい方法知ってたら教えて下さい。
pc05-Event_Door01.png

  1. BehaviorTreeのMoveToと並列に動くサービスとして扉チェックを回す。
  2. ヒットした先が扉+閉じられていた場合、MoveToの移動先を「扉を開ける為の回避場所」にして、扉を開けられるように。
    • 扉を開ける為の回避場所:ドアActorに仕込んでおいた。
  3. 扉開ける
  4. MoveToを元の移動先に戻す。

MoveToの一時中断

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


添付ファイル: filepc05-Event_CancelMoveTo01.png 390件 [詳細] filepc05-Event_Door01.png 301件 [詳細] filepc05-Event_BT05.png 384件 [詳細] filepc05-Event_BT04.png 331件 [詳細] filepc05-Event_BT03.png 306件 [詳細] filepc05-Event_BT02.png 399件 [詳細] filepc05-Event_BT01.png 866件 [詳細] filepc05-Event_Table02.png 381件 [詳細] filepc05-Event_Table01.png 415件 [詳細] filepc05-Event01.png 324件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2016-04-28 (木) 19:47:05 (2913d)