テーマは敵キャラクターを動かそう ビヘイビアツリー編です
GASPのALS版をもとに、モーションマッチで華麗に障害物を乗り越えるアクロバティックな敵キャラをつくりましょう。
遊べる完成形はこちらで公開中 yossi40-100/GASP-ALS: Game Animation Sample with ALS Layering
本記事はAIPerceptionで見失ってしばらくは諦めずに追いかけさせる方法の説明です。
現状の把握
ステップ6で、せっかく見つけても巡回の次の目的地に着くまで歩いている間に見失って追いかけてこない問題は解消しました。
では、暫定的に真横まで見えるようにしていた視野角は再度狭くして、60度で左右120度くらいにしてみます。
BP_AIController / AIPerception 詳細欄
振り切るのは簡単ですが一応追ってきてくれますね
ですが諦めが早すぎるので、もう少し諦めない気持ちを実装しましょう
忘れない
視野角の少し下に、忘れる時間設定があります
これは見失ってから忘れるまでの秒数です。
つまり、5.0秒間は見えてたことを覚えているということです
ただし設定しただけでは特に影響はありません。
見失ったときのイベントを改造してみます
たぶんこの忘れたイベントを使うといいのだと思いますが、有効になっている必要があるフラグの情報がよくわからないのでわかる方法で解決します。
まず忘れたときに実行するカスタムイベントを作って
見失ったときにこのイベントを遅れて呼び出すように作ります
ちょっと難しいですが、Delayだとキャンセルできないので、見失ってすぐまた見つけたときにも5秒経ったらDelayの次の処理が動いて忘れちゃいます
それを避けるには、タイマーで設定しつつ、見つけたらタイマーを解除するという作戦です
Expiration Age が先ほど設定したMaxAge と同じなので、これをタイマーの時間にセットしましょう
忘れたタイミングで黒板からプレイヤーを消したいのでこっちにつなぎ変えます
あとは再発見時にタイマーを無効化できるように変数に保存(右クリックから変数に昇格)して、
発見したときにこのタイマーをクリア(Clear and Invalidate Timer by Handleにその変数を接続)してあげれば完成ですね
- 発見すると黒板にプレイヤーを書き込み探索処理が動き出すと同時にタイマーはリセット
- 見失うとタイマースタート
- 5秒以内に再発見すると1に行き黒板は書き直されるが変化がなく、タイマーはリセットされる
- 5秒以内に再発見できないと黒板からプレイヤーを消して巡回モードに
見失ってもまだ追ってくるようになりましたね。
これで追いかけっこ本番ですね
強いw
見えていなくても5秒間はこちらの動きを完全に把握されている透視状態なので、5秒間視界に入られないように逃げ続ける必要があります。
見えないときはこちらの行動を予測を立てて探索するというような高度なAI化もできます。本連載でそこまで考慮するか未定ですが。。。
コメント