Brainで敵キャラがプレイヤーを追いかけて攻撃する設定方法について紹介していこうと思います。Brainで敵キャラを動かしていこうと思います。Brain"というコンポーネントを使用してAIの行動を決定しています。Brain"が作られているのか理解する必要があります。感覚的に設定...aquaregia31.com2023.07.28以下の動画のように敵がプレイヤーを探索し、一定の距離に入ったらプレイヤーに向かって走り攻撃するようになります。今回もDemoの作りから見ていこうと思います。参考にするDemoの場所は以下になります。Brainを見てみると以下のようになっています。それぞれStatesとスクリプトについて細かく見ていこうと思います。DetectingMovingAttackingDetecting(探索)ActionsAIActionDoNothingスクリプト名が示すように何もしないアクションになります。AIはその場でじっとしています。TransitionsAIDecisionDetectTargetRadius2DTargetLayerで指定したレイヤーオブジェクトが指定されたRadius内にある場合はtrueを返します。それ以外の条件の場合はfalseを返します。上記のパラメータを見るとTargetLayerはPlayer、Radiusは”7′′となっているため、敵を中心とした”7′′の距離にプレイヤーが存在する場合はTrue、いない場合はFalseを返す作りになります。AIDecisionDetectTargetRadius2DのRadiusの値を10などにすることでより遠くの位置からプレイヤーを見つけるようにすることができます。上記の動きをすることが分かります。現状は止まったままでプレイヤーを探索していますが、ActionsをAIActionDoNothing以外の設定にすることで、決まったルートを動き回りながらプレイヤーを探したり、ランダムに動きながらプレイヤーを探したりすることもできます。Moving(移動)ActionsAIActionMoveTowardsTarget2D敵をターゲット方向に指定したMinimumDistanceの距離まで移動させます。このコンポーネントを使用することで、敵がプレイヤーのほうに近づいてくれます。注意として敵をターゲット方向に移動させる必要があるため、AIActionMoveTowardsTarget2Dを実行するためにはCharacterMovementコンポーネントが付与されていることが必要です。TransitionsAIDecisionDetectTargetRadius2DMovingでもDetecting同様の作りで使用されています。True条件が空欄でFalse条件にDetectingへ遷移するように設定しています。「プレイヤーに向かっている間にプレイヤーが指定の範囲内にいなかったらDetectingの処理へ遷移する(False分岐)」といった形になっています。このようにすることで、プレイヤーが見つかっている間は追いかけて、見つからなかったらその場で止まるようになります。AIDecisionTargetIsAliveターゲットが生存している場合はTrue、いない場合はFalseを返します。True条件が空欄でFalse条件にDetectingへ遷移するように設定しています。→Detecting処理に遷移して、最終的にはその場でじっとするようになります。AIDecisionDistanceToTargetターゲットが指定された範囲内にある場合はTrueを返し、それ以外の場合はFalseを返します。Than(以下)でDistanceが”2′′なので、ターゲットまでの距離が”2′′以下になった場合にTrue、”2′′よりも離れている場合はFalseを返す動きになっています。条件分岐を見てみるとTrue条件がAttackingへ遷移するように設定されていて、False条件は空欄になっています。「プレイヤーまでの距離が”2′′よりも離れている場合はMovingの処理を継続する(False分岐)」という形でプレイヤーが近づいたら攻撃処理に遷移するようになっています。Movingの動きあらためてMovingの動きになりますがターゲットに向かって移動し続ける(Actions)探索指定範囲にいるかどうかチェックを行い、探索指定範囲外だったら止まる(Detectingに遷移する)ターゲットが生存しているかチェックを行い、ターゲットがいない場合は止まる(Detectingに遷移する)ターゲットが指定の距離まで近づいたら攻撃処理に遷移する(Attackingに遷移する)ターゲットが指定の距離まで近づいていなかったら移動処理を続ける(Movingを継続)という動きをしています。設定した武器を使用して攻撃を行います。設定されている場合は自動で設定されます。Max)の間でランダムに指定された期間(秒単位)が経過した後にTrueを返します。時間が経過しない場合はFalseを返します。主な用途として指定秒後に何かを行うために使用するといいと思います。指定の時間が経過した場合はTrue、経過していない場合はFalseを返します。True条件がDetectingへ遷移してFalse条件が空欄に設定しています。敵によって5秒間攻撃したい、ランダムの時間攻撃したいなどあると思いますが、AIDecisionTimeInStateで時間を設定することで攻撃している時間を指定することができます。Attackingの動きAttackingの動きは指定の時間まで攻撃を行う指定の時間が経過したら攻撃をやめる(敵の探索に遷移する)という動きをしています。いうループが続くため敵は攻撃しっぱなしです。現状攻撃のスキがない状態なので、攻撃の後に「待機」などの行動を入れてあげるとプレイヤーが攻撃できるスキができるかなと思います。Brainで敵キャラがプレイヤーを追いかけて攻撃する設定方法について紹介しました。簡単にまとめると敵を探す(Detecting)敵に向かって移動する(Moving)攻撃する(Attacking)それぞれに対して実行動作(Actions)と遷移条件(Transitions)を設定することで敵を動かすことができます。今回はDemoにある基本的な動かし方を紹介させていただきましたが、ほかにも「ランダムに動く」、「ルートに従って動く」などもActionsで指定することができるためいろいろと試しに動かしてみるといいかなと思います。今回は「AIDecisionDetectTargetRadius2D」を用いてPlyaerを探索していますが他にも「ConeOfVision」を用いたPlayerの探索方法があります。興味がある方は以下の記事もご確認ください。第1回から今回の第4回までで、ほぼ遠距離武器の作り方について説明できたかなと思います。第6回となる今回はMagazineとReloadについて紹介していこうと思います。Engineには標準的に実装されています。EngineのDemoにあるKoalaDungeonについて記載していこうと思います。KoalaDungeonがあるのは分かったけど何がどう動いてるの!?という人に向けた記事になります。Engineには「ある範囲に入った時に特定のボタン(Space)を押すことでイベントを実行する」処理がすでに組まれています。EngineにはInventoryという機能が存在し、Inventory機能を用いることでドロップアイテムを作成することができます。デフォルトのScreenを見てみるとBoxCollider2Dで指定された範囲をカメラが動かせるように設定されています。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。最近のコメント表示できるコメントはありません。免責事項等ホーム検索トップサイドバータイトルとURLをコピーしました。