#はじめに
「AIのExample Projectを作ってみました」シリーズの最終章となります。
ここでは武器のブループリントやウィジェットブループリント(UI)について紹介と解説をしていきます。
#プロジェクトはこちらです!
今回解説するプロジェクトはOneDriveにアップしてあります。バージョンは4.18.2です。
#BP_BaseWeapon
全ての武器の基底クラスです。武器の実装のほとんどはこのクラスに詰まっています。
##IFire
武器の所持者(BP_PlayerやBP_Guard)から発射イベントが呼び出されると、このイベントが実行されます。
- 関数LOSで引数Trace Startから引数Forwardに向かってトレースし結果を返します。
- 関数SpawnBulletTraceでエフェクトを生成します。
- Apply Point Damageでトレースがヒットしたアクタに対しダメージを与えます(武器が与えるダメージなどは構造体で定義しています)
- 武器の装弾数を減らします。
- 弾倉が空になれば、GetAttachParentActorで武器を所持するアクタに対し「OnReloadディスパッチャ」を呼び出しリロードするように命令します
この関数はLine Of Sight(射線チェック)を行ないます。
銃のブレを発生させる引数RandomizeがTRUEであれば関数Random Float In Rangeで-Radius~+Radiusまでのランダムな数値を取得します。
取得した数値はブレの位置を表す変数TraceNoiseに格納されます。この処理により銃弾(実際はトレース)は銃口を先端とするコーン(円錐)状に拡散します。
実際にトレースを行なうLineTraceByChannelのStartには引数Trace Startがそのまま渡されます。引数Trace Startには銃口の位置やカメラの位置が渡されます。
Endには引数Forwardから武器の持つ最大射程距離でスケーリングされ変数TraceNoiseが加えられます。引数RandomizeがTRUEであればここでブレが発生します。
Actors to Ignoreには武器を持つアクタをGet Attach Parent Actorで取得し除外対象として配列に加えられます。
武器を持つアクタのコリジョンサイズによっては銃口の位置がコリジョン内に当たったりするため、Actors to IgnoreでLOSの邪魔をしないようにしています。
#BP_Bolt
この武器は殺傷能力はありません。プレイヤーが敵をおびき出したり遠ざけたりする際に用いられます。
OnComponentBeginOverlapイベントではボルトが何かしらにぶつかった場所から周囲にReport Noise Eventで決まった距離に「ノイズが鳴ったよ!」と知らせます。
Report Noise EventはAIPerceptionを持つAIに対し「何か音が鳴ったよ」と知らせるイベントです。これはエンジン側で実装されています。
Noise Locationは音が鳴った位置。Max Rangeには音が鳴った時お知らせする範囲を設定します。
AIはAIPerceptionで設定された音の聞こえる範囲内でReport Noise Eventを受け取った場合に探索行動を開始します。
#各章へのリンク集
フォルダ構造編
第1章 - プログラムの紹介&解説
第2章 - AI
最終章 - 武器