EQSでランダムウォーク
こんばんは、goolee(ごり)です。
今日はEQSを用いたランダムウォークについて。
ランダムには動いているので、良しとしました。
では「EQS_RandomWalk」の名前のEQSを作ります。
今回用いたGenerator は「Circle」Generator です。
変更する部分は円の半径、生成するアイテム間の距離、トレースモードの3つです。
今回は
円の半径を300 。
生成するアイテム間の距離を DataBinding の設定を 「Randomnumber」 で
最小値を「100」最大値を「400」。
TraceData のTraceMode を 「None」にしました。
アイテム間の距離をランダムにすることで、プレイヤーの正面にアイテムが生成されない場合を作り、これによって前に進み続けて行きどまりになったら方向転換という動きだけにならないようにしました。
TraceModeを「None」にした理由ですが、
TraceModeが「Navigation」のままだと目の前に壁があると、壁の手前にアイテムが生成されてしまい、トレースのテストに影響が出てしまうと考えました。
なので「None」にして目の前に壁があっても壁の奥にアイテムが生成されるようにしました。
次に今回行ったテストは
・現在向いている方向にある点かどうか
・視界にはいっているかどうか
・到達可能かどうか
の3つです。
まず 現在向いている方向にある点かどうか です。
これには 「Dot」テストを行います。
変更する部分はTestPurposeを「ScoreOnly」に変えるだけです。
これは数学の内積ですね。
プレイヤーが向いている方向ベクトル(赤色)と
プレイヤーからアイテムまでのベクトル(青色)で内積を行っています。
赤色と青色の矢印のなす角度Θが小さいほど内積の値は大きくなります。
つまり内積の値が大きくなるほど、向いている方向のアイテムになるということです。
では次に 視界にはいっているかどうか です。
これは前回書いた記事で行った 「Trace」テストを行います。
TestPurposeを「FilterOnly」にし Boolの一致のチェックをはずします。
最後に 到達可能かどうか です。
これには 「PathFinding 」のテストを行います。
これはアイテムまでの移動経路があるかどうかを判断してくれます。
変更する部分は TestPurposeを 「FilterOnly」に変えるだけです。
これでランダムウォークのEQSは完成です。
あとはこのようなビヘイビアツリーを作成すれば動きます。
移動のタスクは自作のものを使用していますが、「MoveTo」のタスクでも動くと思います。
実際に動かした動画がこちらになります。
なにかおかしな点ありましたらコメントお願いします。
ではまた。