【TopDown Engine】ConeOfVisionでプレイヤーを見つける方法

ConeOfVisionの画面 TopDownEngine
スポンサーリンク

前書き

以前、敵AIの視界内にプレイヤーが入ってきたらTrueを返す処理(AIDecisionDetectTargetRadius2D)を紹介しましたが、ほかにも敵AIの視界にプレイヤーが入ってきたらTrueを返す処理があることが分かりました。今回は新しく見つけた敵AIの視界にプレイヤーが入ったか判別する方法(ConeOfVision)について紹介していこうと思います。

以前の記事は以下になります。

ConeOfVisionとはどんな機能?

簡単に言うと、MeshRendererを用いてキャラクタの視界を作成する機能になります。以下のようにKoalaにはデフォルトでKoalaConeOfVisionが設定されています。

ConeOfVisionのインスペクター

KoalaConeOfVisionをNinjaに設定してみました。以下のNinjaを中心として壁に沿ったオレンジ色の線の領域があることが分かると思います。このオレンジ色の線の領域がConeOfVisionの領域(Ninjaの視界)になります。

ConeOfVisionを表示した時のScene

ただ、ConeOfVisionを設定しただけだとキャラクタに視界を設定しただけなので、ここからさらに「視界内に対象が入った場合何をする?」といった処理を追加してあげる必要がありますがそれはAIBrainで設定できますので後ほど説明していきたいと思います。

まずはAIBrainでキャラクタの行動をさせるための必要なスクリプトから説明していきます。

ConeOfVisionを使って敵AIがプレイヤーを追いかけるスクリプト

ConeOfVisionを使って敵AIがプレイヤーを追いかけるために必要となるスクリプトは以下になります。

  • MMConeOfVision2D(必須)
  • AIDecisionDetectTargetConeOfVision2D(必須)
  • AIActionRotateConeOfVision2D(任意)

MMConeOfVision2D(必須)

キャラクタに設定したConeOfVisionの大きさやターゲットとなる対象、ConeOfVisionで遮られるものなどを設定することができます。重要な部分だけを抜き出すと以下3つを気を付ければいいかなと思います。

  • Obstacle Mask
    →ConeOfVisionが遮られる対象。デフォルトだとObstacles(壁)になっています。
  • VisionRadius
    →ConeOfVisionの大きさを設定します。
  • Target Mask
    →ConeOfVisionで探す対象。デフォルトはPlayerになっています。
MMConeOfVision2Dのインスペクター

AIDecisionDetectTargetConeOfVision2D(必須)

ConeOfVisionで指定したTargetが見つかった場合にTrueを返すscriptになります。AIBrainのTransitionsに設定するために必要になります。

AIDecisionDetectTargetConeOfVision2Dのインスペクター

AIActionRotateConeOfVision2D(任意)

キャラクタの移動方向や武器の方向によってConeOfVisionを回転させることができるscriptになります。ConeOfVisionが円形の場合はキャラクタを中心とした視界の距離に差は出てきませんが、円形以外の場合、キャラクタの向きによってはConeOfVisionを回転させたほうが整合性が取れると思います。場合によって設定の有無がありますので任意のscriptになっています。

AIActionRotateConeOfVision2Dのインスペクター

設定したAIで動かしてみると

MMConeOfVision2DとAIDecisionDetectTargetConeOfVision2DをAIBrainに設定したときの参考例が以下になります。AIBrainの詳細は省きますが、ConeOfVisionの範囲内に入った場合、Playerを追いかけるAIBrainの設定になっています。

AIBrainの設定

動かしてみると以下のようになります。NinjaのConeOfVision(オレンジ色の領域)にKoala(PlayerTag)が入ると追いかけてる様子が分かりますね。またConeOfVisionからKoalaがいなくなると動きが止まる様子も分かります。

まとめ

今回はConeOfVisionでプレイヤーを見つける方法について紹介しました。

以前紹介したAIDecisionDetectTargetRadius2Dの場合ですと、敵からPlayerまで一直線の線でつながった場合にPlayerを見つけたと判断するのに対して、ConeOfVisionの場合はConeOfVisionの領域にPlayerがいるのかどうかを判断しています。そのため、AIDecisionDetectTargetRadius2Dよりもより柔軟にPlayerを見つけることができるかなと思います。もしも、まだConeOfVisionを試したことがない方は一度、試してみてはいかがでしょうか?

コメント

タイトルとURLをコピーしました