本記事は「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 Pawn | Pawn | なし | 「プレイヤーのBP」から情報を引用する 「Get Plater Pawnノード」のReturnValueから「変数に昇格」で作れる |
Search Range | Float | 500 | 探知する当たり判定の範囲(距離)になる |
変数を作れたらこんな感じにノードを組んでね
できたら「BP_PC」に移動して
「Q key」を押したら「Search Radar関数」が起動されるようにしよう
これで組み立て完了
後は「フィルールド上」に「Target」を「ドラッグ&ドロップ」で置たら準備は完了だ
では早速プレイしてみよう
取得できてるんだけど… なんか多くない?
しかも「Enemy」でもないのにボタンを押すだけで「Hit=0」と表示される
変数の数え方としては「0」から始まるから
「0」が出てる時点で「何かを取得しているんだ」
なんでこうなっているのか…
というのも原因は単純明快
条件に「Enemyのみ」と設定してないから「壁」や「床」も取得してしまっているのだ
何もない場所と思ってても「床」が取得されてるから「Hit=0」と表示されたんだね
こりゃ良くない
ので、「Enemyのみ」を取得できるようにしよう
「Enemy」であるアクターだけを「取得」する
まずは2つの「変数」を用意してね
作った変数名 | 型 | 変数のタイプ | 値 | 内容 |
Enemy | Actor (オブジェクト参照) | 配列 | なし | 取得した「アクター」を保管する入れ物 これを出し入れすることで「ロックオン」相手を決める |
Tag Enemy | Name | 単一 | Enemy | タグと比べるための変数 「Enemy」と比べてそうであるかを判定する |
変数を用意出来たらこんな感じにノードを組んでね
これでプレイしてみよう
「Enemy」のみを取得できた!
けど…
なんか「 Q key」を押せば押すほど数字が増えるてくよ
どうしてこうなるのかと言えば
「同じアクターをもう1度取得している」からだね
データの重複はよくないから
今度は「同じアクターは取得しない」ようにしよう
「同じアクターは取得しない」ようにする
変数内に同じデータがあるかどうかを見てくれる
「Contains ノード」を使って組んでいこう
こんな感じにノードを組んでね
これで「プレイ」してみると
どんなに連打しても「Hit =3」以上は増えないね!
しっかり「0~3」までの「4つのEnemy」を取得できているよ!
やったね!
連続で「Search Radar」を行う
最後に、ゲームを開始した瞬間から「Search Radar」を連続で行うようにするよ
まずは「GAR_System」の「EventGraph」にて
「initial startup」(初期起動)という「カスタムイベント」を作るよ
そしたらこんな感じに、ノードを組みつつ変数を作ってね
作った変数名 | 型 | 値 | 内容 |
Search Interval | Froat | 0.1 | 「Set Timer by Function Name」の 起動間隔を決める |
Search Radar Timer Handle | Timer Handle | なし | 「Set Timer by Function Name」の 実行を管理するノード |
これで起動すれば、毎0.1秒づつ「Search Radar関数」が実行されるようになるよ
ノードが組み終わったら次は「BP_PC」を開いて
こんな感じにノードを組んでね
これで準備は完了だ!
「プレイ」して挙動を確認してみよう!
うん!連続で「Search Radar」が起動できてるね!
これで「Q key」による手動での起動ともおさらばだ!
「敵のデータを取得して配列に追加する」の完了だ!
やったね!
おわりに
以上
「敵のデータを取得するならこれ!アクターを配列に追加する方法!」
でした!
それじゃあ次の記事にて、またね!
コメント