PR

【UE5】敵のデータを取得するならこれ!アクターを配列に追加する方法!【BluePrint】

BluePrint

本記事は「UE5_Ver5.3.2」で制作しているよ

こんにちは!ウンパッパです!

今回はUE5にて
「Enemy」と定めた「アクター」のデータを取得し配列に追加する方法
を解説していくよ!

まずは完成した動画を見てみよう

球状の当たり判定に「敵」が入ると「ログ」に敵の当たった数が表示されるね

やっていることとしては

プレイヤーの周囲に「球状の当たり判定」があって
それに「赤い球(敵)」が当たったときにだけ
左上の「ログ」から「Hit Enemy=数」と表示させているんだ

ここで重要なのは
「敵の数を数えている」こと
ではなく
「敵の情報だけを取得できている」こと

これを行うことで
「敵ならば○○する」という敵に向けた様々なシステムが適応できるんだ

敵に限らず「キャラクターの属性を判別し取得する」システム
ゲームにおいて必ず必要だと思うよ

そんな感じでとっても重要なシステムなので
さっそく作りに行ってみよう!

「敵(まと)」を作る

素材の用意ができたら
ロックオンする対象である「まと」を作ろう

「まと」のブループリントを作る

最初は
「コンテンツブラウザ」の「コンテンツ」にて「敵」をまとめるための
「Enemies フォルダ」を作ってね

フォルダができたら開いて、敵のブループリントを作ろう

「右クリック」⇒「ブループリント クラス」⇒「Actor」
を選択

生成された「ブループリント」の名前を「Target」と命名

これで敵のブループリントが用意出来たよ

「まと」の見た目を決める

もし既に「まとの見た目」を用意出来てるなら飛ばしてOK

今回はこんな感じの見た目にするよ

まずは「Target」を開いて

画面左側にある「コンポーネント」⇒「追加」⇒「球」を選択

すると、球体がでてくるので見た目はこれでOK

次に色を決めよう

「コンテンツブラウザ」に戻って

「右クリック」⇒「マテリアル」を選択

生成できたマテリアルを「M_Target」と命名

名前を付けたら「M_Target」を開いて

「M_Target ノード」の「ベースカラー」を
「右クリック」⇒「パラメーターへ昇格」

昇格で生成された「ベースカラーノード」を「ダブルクリック」すると色を調整できるよ

今回はわかりやすく赤にしよう

「ベースカラーノード」を作る要領でほかの要素もノード化できるよ

自分の好みに合わせてマテリアルを作ってみてね

できたら画面左上にある「適応」を押してね

これでマテリアルの設定はOKだ

最後にアクターの「Target」を開いて

「Sphere」の「詳細」内にある「マテリアル」に

さっき作った
「M_Target」に差し替えればOKだ

これで「Target」の見た目の設定OKだよ

「Tag」をつける

ロックオンする際に「敵」と「自分(味方)」を判別したいんだ

そのために、それぞれに「Tag」を付けて識別できるようにするよ

まずは「Target」に「Tag」を付けよう

「Target」を開いて
「コンポーネント」から「Target(Self)」を選択

「詳細」から「Tag」と検索し

「Tag」を設定できる「Tags」があるので
「+」を押して「インデックス」を生成

「インデックス[0]」に「Enemy」と記入すればタグ付け完了だ

これで「Tag」付けはOKだ

「外付け型システム」として作る

敵のデータを取得したなら、様々なパラメーターの変更や挙動の改変をしたいよね

そんな増え続けるであろう膨大なシステムになる可能性を考えて

「外付けのシステム」として作り、「BP_PC(PlayerCharacter)」に
くっつける形で実装していくよ

こうすることで、「1つのBP」がごちゃごちゃしすぎることを防ぎ
システムどおし必要最低限のすっきりとしたBPに作れるんだ

「Actor Component」を生成する

まずはその「外付けのBP」となる「Actor Component」を生成していこう

「コンテンツ」⇒「Blueprint」にて
「右クリック」⇒「ブループリント クラス」⇒「Actor Component」を選択

名前は「Get Actor Radar System」改め
「GAR_System」とするよ

「Actor Component」と「BP_PC」を紐づける

次に「GAR_System」を「BP_PC」にくっつけるよ

「BP_PC」の「コンポーネント」から

「追加」⇒「GAR_System」を検索して選択

画像のように「GAR_System」が表示されていたらOKだ

システムが紐づけできているかを確認する

まずは「GAR_System」にてこんな感じにノードを組んでね

次に「BP_PC」にて

「コンポーネント」から「GAR_System」を「ドラッグ&ドロップ」

出来た「GAR_Systemノード」のピンから「Test」を検索して生成
こんな感じにノードを組んでね

できたら「プレイ」してみよう

「Q key」を押すたびに「Hello」が表示されるね

これで「紐づけ」の確認完了だ

できたなら、本格的に「GAR_System」を組み立てにいこう

「Search Radar」を作って「アクター」に移行を取得してみる

「範囲内に入ったアクターを取得できる」ようにしよう

まずは「GAR_System」に「Search Radar関数」を作ってね

作ったらもう使わない「Test ノード」は削除しよう

その後「Search Radar関数」にて
以下の変数を作ってね

作った変数名内容
Player PawnPawnなし「プレイヤーのBP」から情報を引用する
「Get Plater Pawnノード」のReturnValueから「変数に昇格」で作れる
Search RangeFloat500探知する当たり判定の範囲(距離)になる

変数を作れたらこんな感じにノードを組んでね

できたら「BP_PC」に移動して

「Q key」を押したら「Search Radar関数」が起動されるようにしよう

これで組み立て完了

後は「フィルールド上」に「Target」を「ドラッグ&ドロップ」で置たら準備は完了だ

では早速プレイしてみよう

取得できてるんだけど… なんか多くない?
しかも「Enemy」でもないのにボタンを押すだけで「Hit=0」と表示される

変数の数え方としては「0」から始まるから
「0」が出てる時点で「何かを取得しているんだ」

なんでこうなっているのか…
というのも原因は単純明快
条件に「Enemyのみ」と設定してないから「壁」や「床」も取得してしまっているのだ

何もない場所と思ってても「床」が取得されてるから「Hit=0」と表示されたんだね

こりゃ良くない

ので、「Enemyのみ」を取得できるようにしよう

「Enemy」であるアクターだけを「取得」する

まずは2つの「変数」を用意してね

作った変数名変数のタイプ内容
EnemyActor
(オブジェクト参照)
配列なし取得した「アクター」を保管する入れ物
これを出し入れすることで「ロックオン」相手を決める
Tag EnemyName単一Enemyタグと比べるための変数
「Enemy」と比べてそうであるかを判定する

変数を用意出来たらこんな感じにノードを組んでね

これでプレイしてみよう

「Enemy」のみを取得できた!
けど…
なんか「 Q key」を押せば押すほど数字が増えるてくよ

どうしてこうなるのかと言えば
「同じアクターをもう1度取得している」からだね

データの重複はよくないから
今度は「同じアクターは取得しない」ようにしよう

「同じアクターは取得しない」ようにする

変数内に同じデータがあるかどうかを見てくれる
「Contains ノード」を使って組んでいこう

こんな感じにノードを組んでね

これで「プレイ」してみると

どんなに連打しても「Hit =3」以上は増えないね!

しっかり「0~3」までの「4つのEnemy」を取得できているよ!

やったね!

連続で「Search Radar」を行う

最後に、ゲームを開始した瞬間から「Search Radar」を連続で行うようにするよ

まずは「GAR_System」の「EventGraph」にて
「initial startup」(初期起動)という「カスタムイベント」を作るよ

そしたらこんな感じに、ノードを組みつつ変数を作ってね

作った変数名内容
Search IntervalFroat0.1「Set Timer by Function Name」の
起動間隔を決める
Search Radar Timer HandleTimer Handleなし「Set Timer by Function Name」の
実行を管理するノード

これで起動すれば、毎0.1秒づつ「Search Radar関数」が実行されるようになるよ

ノードが組み終わったら次は「BP_PC」を開いて

こんな感じにノードを組んでね

これで準備は完了だ!

「プレイ」して挙動を確認してみよう!

うん!連続で「Search Radar」が起動できてるね!
これで「Q key」による手動での起動ともおさらばだ!


「敵のデータを取得して配列に追加する」の完了だ!

やったね!

おわりに

以上
「敵のデータを取得するならこれ!アクターを配列に追加する方法!」
でした!

それじゃあ次の記事にて、またね!

コメント

unpappa

3Dとゲーム制作を趣味でたしなむ遊び人
ロボットアニメとアニメ調のキャラが好きで趣味でちょこちょこ作ります
人生の目標は「オリジナルのロボゲー」を1本作る事!
初心者だからこそ、いろいろな荒波がやってくるけど、それらを学びに変えて
「最もわかりやすいクリエイティブブログ」を目指してます!どうぞ良しなに!

unpappaをフォローする
Ci-enを始めました!あなたの応援で本サイトの記事の投稿頻度と質を向上させることができます!
詳しく見る!
Ci-enを始めました!あなたの応援で本サイトの記事の投稿頻度と質を向上させることができます!
詳しく見る!
タイトルとURLをコピーしました