テーマは敵キャラクターを動かそう ビヘイビアツリー編です
GASPのALS版をもとに、モーションマッチで華麗に障害物を乗り越えるアクロバティックな敵キャラをつくりましょう。
遊べる完成形はこちらで公開中 yossi40-100/GASP-ALS: Game Animation Sample with ALS Layering
本記事はビヘイビアツリーの処理をデコレーターで即時変更させる方法の説明です。
現状の把握
ステップ5までで、一見うまくいっていますが、実はいくつか細かい問題があります
巡回している最中も、走りへの切り替えまでは成功するので、走りに切り替わってから歩きに切り替わって歩いていることと
もうひとつは、一旦歩き出したらプレイヤーを発見しても、さっき決めたゴールまで歩いていくことです
それを解決する案として、「デコレーター」という仕組みを導入します
BT_AI
いままではタスク成功・失敗を条件にシーケンス・セレクタで続けるやめるの切り替えだけでしたが、
選択中のノードを修飾して(デコって)、実行する際の条件などを追加できるオプションです。
Blackboardというデコレーターを追加すると、ブラックボードの指定したキーの中身に応じて、実行する/しないや、優先度低いタスクの中断ができます
Key QueryはIs Setのまま(指定したブラックボードキーが空でないときに条件成立)
Blackboard KeyはTargetActorに変更しましょう
これで、ターゲットアクターがセットされていたら、デコった処理を実行するという条件が追加できました。逆に、この条件が成立していないときはシーケンス自体が失敗するので、追いかけないときには走りに切り替わる処理も動きません
また、用語が難しいですが上のほうの、「オブザーバーを中止」で、条件変化時に中断するものを設定できます
Lower Priorityというのは優先度低い処理のことで、水色でハイライトされた処理を中断してでもこの処理に移るという設定です
これを設定することで、歩いている最中も、見つけ次第追いかけモードに切り替わります
逆に設定する前はランダムに決まった目的地が遠い場合、見つけた!けど目的地着いて休憩してから出発 と、空気を読まない子でした。
ひとつうえのSelfは逆に、条件成立して子の処理実行中でも、条件が不成立になり次第、自身を失敗終了させるという設定です
最後の Both は今説明した2つの中断の合わせ技です。不成立で自身の処理を中断もするし、成立で優先度低いのも中断できると
ツリーが大きくなってくるとややこしくなるので、よく考えましょう
ノードをよく見ると英語ですが、教えてくれています
(aborts both)⇒両方中断
これで冒頭の課題は両方とも解決です。
- 条件不成立時は、歩きモードには切り替えずにすぐ5番の処理へ
- 条件成立時は5番以降のどこにいてもすぐ2,3,4番の処理へ
コメント