愛をもってゲームをつくるゴリラのブログ

UE4初心者のゴリラがいろいろ頑張ります。

EQSでランダムウォーク

こんばんは、goolee(ごり)です。

今日はEQSを用いたランダムウォークについて。

ランダムには動いているので、良しとしました。

では「EQS_RandomWalk」の名前のEQSを作ります。

f:id:m-goolee-y:20170815191602p:plain

今回用いたGenerator は「Circle」Generator です。

変更する部分は円の半径、生成するアイテム間の距離、トレースモードの3つです。

今回は

円の半径を300 。

生成するアイテム間の距離を DataBinding の設定を 「Randomnumber」 で

最小値を「100」最大値を「400」。

TraceData のTraceMode を 「None」にしました。

f:id:m-goolee-y:20170815191712p:plain

アイテム間の距離をランダムにすることで、プレイヤーの正面にアイテムが生成されない場合を作り、これによって前に進み続けて行きどまりになったら方向転換という動きだけにならないようにしました。

TraceModeを「None」にした理由ですが、

TraceModeが「Navigation」のままだと目の前に壁があると、壁の手前にアイテムが生成されてしまい、トレースのテストに影響が出てしまうと考えました。

f:id:m-goolee-y:20170815192956p:plain

なので「None」にして目の前に壁があっても壁の奥にアイテムが生成されるようにしました。

f:id:m-goolee-y:20170815193125p:plain

 

次に今回行ったテストは

・現在向いている方向にある点かどうか

・視界にはいっているかどうか

・到達可能かどうか

の3つです。

 

まず 現在向いている方向にある点かどうか です。

これには 「Dot」テストを行います。

変更する部分はTestPurposeを「ScoreOnly」に変えるだけです。

f:id:m-goolee-y:20170815195350p:plain

これは数学の内積ですね。

 

プレイヤーが向いている方向ベクトル(赤色)と

プレイヤーからアイテムまでのベクトル(青色)で内積を行っています。

赤色青色の矢印のなす角度Θが小さいほど内積の値は大きくなります。

つまり内積の値が大きくなるほど、向いている方向のアイテムになるということです。

 

f:id:m-goolee-y:20170815195244p:plain

 

では次に 視界にはいっているかどうか です。

これは前回書いた記事で行った 「Trace」テストを行います。

TestPurposeを「FilterOnly」にし Boolの一致のチェックをはずします。

f:id:m-goolee-y:20170815200644p:plain

f:id:m-goolee-y:20170815200850p:plain

最後に 到達可能かどうか です。

これには 「PathFinding 」のテストを行います。

これはアイテムまでの移動経路があるかどうかを判断してくれます。

変更する部分は TestPurposeを 「FilterOnly」に変えるだけです。

f:id:m-goolee-y:20170815201332p:plain

これでランダムウォークのEQSは完成です。

 

あとはこのようなビヘイビアツリーを作成すれば動きます。

移動のタスクは自作のものを使用していますが、「MoveTo」のタスクでも動くと思います。

f:id:m-goolee-y:20170815201637p:plain

 実際に動かした動画がこちらになります。


EQSでランダムウォーク

 

 

なにかおかしな点ありましたらコメントお願いします。

ではまた。