テーマは敵キャラクターを動かそう ビヘイビアツリー編です
GASPのALS版をもとに、モーションマッチで華麗に障害物を乗り越えるアクロバティックな敵キャラをつくりましょう。
遊べる完成形はこちらで公開中 yossi40-100/GASP-ALS: Game Animation Sample with ALS Layering
本記事は視覚センサーでブラックボードにプレイヤー情報を書き込み、ビヘイビアツリーの行動選択を変化させる手順の説明です。
視覚センサーで発見したら
ブラックボードにプレイヤーがセットされたら追いかける処理はすでにできています
あとは、見つけたらブラックボードに書き込む処理があればOKです
BP_AIController > イベントグラフ
AIパーセプションに見つけた時発動するイベントがあるので、これを作りましょう
正確には、見つけたときも見失ったときも反応するので「状態更新」で発動するイベントです
あと、視覚センサーしかつけてないけど、聴覚センサーつければ同じイベントが音でも反応します
さらにたくさん視界に入ったときにまとめて1回呼び出されるものと
1つづつバラバラに呼び出されるこれの2種類ありますが1個づつが簡単かなと
反応変化したものが、プレイヤーだったら、黒板に書き込みましょう
コントローラからブラックボードをいじるには、Get Blackboard で参照を取り出します
どこからでも呼び出せる同名の関数ノードではないのでご注意を
それから線を伸ばして「Set Value***」です
タスクからは「Set Blackboard Value***」だったので微妙にややこしいですね
アクターを登録したいので as Object を選択します
これのバリューのところにプレイヤーをつないであげれば、黒板への書き込みです
このノードはName型でキーを指定するタイプなので、引っ張り出して
Make Literal Name でキーの名前を間違えないように指定します
BlackBoardからコピぺが確実でしょう
あとはプレイヤーだったらセットに加えて、False側にプレイヤーじゃなければ空欄にリセットすればOK
ではありません
さきほどもふれましたが、このイベントはプレイヤー以外を見たときにも発動しますし、プレイヤーを見失ったときにも発動します
なので、プレイヤーじゃなかったら無視しつつ、プレイヤーの場合も見たときか見失ったときかで分岐したいです
それには Stimulus という刺激情報を分解して、感じ取ったか失ったかのフラグを使います
これで見つけたら書き込んで、見失ったら黒板消しという処理ができました
おっとコンパイルエラーです。コピペしたときにキーをつけ忘れました(あるあるですね( ;∀;))
キーをFalse側にもつないで無事コンパイルできました
これで、視覚センサーがプレイヤーをとらえたら、ブラックボードの TargetActor に書き込んで、ビヘイビアツリーの左側の MoveTo が開始され、発見前や見失ったらMoveToが失敗するので、優先度の低い右の巡回側の処理が動く作りです。
試しましょう。こっちに向かってきましたね
ただ、一応追いかけてくれていそうですが、あまりうまくいってないですね
デバッグしてみよう
視界に入ると書き込まれてはいます。
では何が原因でしょうか?
BT_AI
まずAcceptable Radius(どこまで近づくか)の設定が5センチメートルは近すぎるので少し広げておきます
ただしそれは近づく距離の問題なので、うまく追ってきてくれない件とは直接関係ありません
ではセンシングがうまくいってないのか?デバッグ表示してみてみましょう
専用のデバッガもありますがここでは簡単に文字表示してみます
BP_AIController > イベントグラフ
ちょっと逸れると見失っているので視野角が狭いかもしれません
実はそれ以外にも原因がありますが、いったん視野角を広げてみましょう
真横まで見える設定にすれば簡単には見失わなくできそうですね
本当はちゃんと解決できていませんが、一旦OKとしましょう
コメント