第五話 Behavior Designer③
【注意】この記事は「とりあえず動いた」を記録するものです。記されている内容は、正しい用法ではない可能性があります。
ハウディーーーーーーーーーーーーーーーーーーーーーーーーー今日も元気にツリーを作るぞ!!!!!!!!
-
タスクを追加してツリーを改造しよう
今回は前回作ったツリーを改造して、「視界内にターゲットが居ない場合、マップ上を散歩する」ようにします。さっそくタスクを追加していきましょう。
早速SelectorをRepeaterとSequenceの間に追加し、Wanderを追加してSelectorにつなぎましょう。↓こんな感じになる。
ついでにSequenceのAbort TypeをBothに変えると、これだけで動く。以上!作業完了!お疲れ様でした!
-
説明
SelectorはSequenceと同じく子タスクを左から順番に実行してくれますが、Falseが返ってきた際に右隣の子タスクを実行してくれます。今回のツリーでは、CanSeeObjectがSequenceにFalseを返した場合Wanderを行ってくれます。
という訳で実行中の子タスクがTrueのとき次の子タスクを実行するSequenceと実行中の子タスクがFalseのとき次の子タスクを実行するSelectorを組み合わせてツリーを作っていくことになります。もちろんこれらのタスクにTrueかFalseかを返すタスクも必要です。今回はCanSeeObjectしか使ってないけどね。
Wanderは勝手にマップ中をうろうろしてくれるすごい奴です。使い方に関してはInspectorを見ていただいた方が早いと思います。一方で指定の経路をパトロールさせたい場合にはPatrolというタスクを使います。今後使うかもしれません。
SequenceのAbort TypeをBothに変えた件に関しては、超絶ふわっとした事を言う感じになってしまって申し訳ないのですが、タスクに表示される矢印のアイコンとタスクの位置が関係してるんじゃないかと思い始めています。前回はSequenceから見て下にあるCanSeeObjectとSeekに遷移するだけでよかったので↓矢印が表示されるSelfでよかったのですが、今回はSequenceの右隣にあるWanderに遷移する必要が出てきました。なので↓矢印と→矢印を兼ね備えたBothを選択することで正しく動作することが出来るようになったのではないかと考えています(この記事はBehavior Designerを初めて1週間も経っとらん奴が書いています)。
-
おまけ
CanSeeObjectを増やして視界範囲をそれっぽくしてみたよ。Selectorを使って1つめの視界がFalseのとき次の視界の判定に遷移するようにしたよ。いずれかの視界からTrueが返ってきたとき、SequenceによりSeekが実行されるよ。また、Abort Typeは遷移すべきタスクが下にも右にもあるのでBothにしたよ。しかしLower Priorityでも動作する事が判明。その上この状態でSequenceのAbort TypeをLower Priorityしても問題なく動作した。ちょっとよくわからない。
謎が深まりまくるBehavior Designer。使い続ける事で理解できる日が来るのだろうか。
という訳で「動いたけどなんで動いてんのかいまいち理解していない話」でした。次回はEnemyをPrefabにした時のアレを書くかも。