お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2024/08/09 12:00

企画記事

【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう



1 2 3 4 5 6 7 8 9 10 11 12 13

9 メイン処理 的を作ってみよう P.4(9)へ



9.的を作ってみよう
メイン処理 1/2


 ここからは,シューター要素に欠かせない「的」を作っていこう。「的」がなんであれ,それを素早く正確に狙って撃ち抜くことが,FPSの醍醐味の一つだ。
 「的」の制作手順は,ブループリントというファイルの作成,3Dモデルの設定,当たった時の処理の実装という流れだ。

※本記事では「分わかりやすさ」を優先した実装を行うため,効率や拡張性などは後回しにしている。あらかじめご了承いただきたい。

9-1:「コンテンツ ドロワー」(Ctrl+Spaceバー)の左側を操作し,「All/コンテンツ/FirstPerson/Blueprints」を開く
画像集 No.097のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-2:赤枠で囲った部分のように,何もない部分を右クリック(ここにはレベルに置かれている「BP_Pickup_Rifle」(銃)などが保存されている)
画像集 No.098のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-3:右クリックしたらメニューが表示されるので,「ブループリント クラス」を選択する
画像集 No.099のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-4:「親クラスを選択」というダイアログボックスが表示されるので,一番シンプルな機能を持つ「Actor」を指定する。これは,シンプルな機能を持った「クラス」であり,「Actorクラス」ともいう
画像集 No.100のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


 「Actorクラス」の前に,そもそも「クラス」が何者なのか説明しよう。
 クラスとは,かみ砕いて簡単に言うと,何かを作るための「共通した処理」をまとめたものだ。オブジェクトに対して,「設計図」や「ひな形」に相当し,各オブジェクトは,この設計図に基づいて作成を行う。

 例えば,丼ものを作るとしよう。牛丼や親子丼,中華丼などさまざまな種類があると思うが,とりあえず「ご飯を炊く」という共通した処理がある。
 もし,あなたが牛丼と親子丼,中華丼のそれぞれの設計図を作るとした場合,どれも「ご飯を炊く」という部分を含める必要が出てくる。ほとんど同じ内容を,繰り返し作るのは面倒だ。

 ここで「ご飯を炊く」という処理を1つの設計図「ご飯クラス」にまとめて,各丼はその設計図をベースに,「ご飯に乗せる具材」をそれぞれ追加すれば良い。
 牛丼の作り方をまとめた「牛丼クラス」,親子丼の作り方をまとめた「親子丼クラス」はそれぞれ別のクラスだが,両方とも「ご飯クラス」をベースにすることで,ご飯を炊く処理を省略できる。

「ご飯 システム」のように重複している処理を,それぞれのクラスに実装している
画像集 No.321のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

クラスをベースにしていくことで,「ご飯 システム」や「牛肉 システム」がそれぞれ1回だけの実装になった
画像集 No.322のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

 当然の話だが,もし中華丼の設計図「中華丼クラス」を作るとして,「牛丼クラス」や「親子丼クラス」をベースにする人はいないだろう。
 一方,牛丼にチーズを乗せた「チーズ牛丼クラス」を作るとしたら,「ご飯クラス」よりも「牛丼クラス」をベースにした方が効率的だ。

 また,炊飯器を新しくしたり,米を精米から無洗米に変更したりする場合も,それぞれの丼クラスで個別に更新することなく「ご飯クラス」を更新すれば一括で更新できるメリットがある。

クラス オブジェクトを作るための「設計図」に相当するもの

「的」のように「処理付きのオブジェクトを作成する」ということは,基本的に何らかの「クラス」をベースに,新しく「別のクラス」を作ることである
つまり「設計図」をベースに,新しい「別の設計図」を作ることである

作成したブループリントはあくまで「設計図」で,レベル上に配置した際に「実体」となる

 話は戻るが,先ほど選択した「Actorクラス」は,すべての丼のベースとなる「ご飯クラス」に相当し,「Pawnクラス」や「Characterクラス」は以下のように説明できる。

Actorクラス ご飯クラス
ベースとなる,ご飯を炊くための手順書 ベースとなるシンプルなもの
Pawnクラス 牛丼クラス
Actorクラスに「操作できる機能」などを追加したもの ご飯クラスに「牛肉」などを追加したもの
Characterクラス チーズ牛丼クラス
Pawnクラスに「歩行機能」などを追加したもの 牛丼クラスに「チーズ」などを追加したもの

 このようにクラスは,ベースとなるクラスに処理を追加していく使い方をする。

 さて,今回「的」を作るために「Actorクラス」を選択したが,「的」は“牛肉”や“チーズ”(操作機能や歩行機能)が必要なく,むしろ邪魔になってしまう。
 機能がいろいろと追加された「Characterクラス」が万能なのでは,逆にシンプルな「Actorクラス」で全部作ってしまえるのでは,と思った人もいるかもしれない。
 しかしながら,クラスは適切に使い分けないと,似た処理を何度も作ることになったり,機能が多くて汎用性が減り,逆に不便になったりするのだ。

 これらは抽象的な概念なので,感覚を掴むのが非常に難しい内容だ。筆者は「Java」というプログラミング言語を勉強していた際に,クラスの理解にかなり悩まされた記憶がある。同じように難しく感じる人もいるだろう。

 筆者がUE初心者向けにアドバイスするならば,「クラス」そのものを理解するのは,後回しにしてしまおう。UEやプログラミングの概念に慣れ始めた頃に,改めて勉強すれば案外,簡単に理解できたりする。
 とりあえず今は,クラスとは「何かを作る際のベースになるものだ」と覚えておけば大丈夫だ。


9-5:ファイル名は「BP_SimpleTarget」とする。「BP」は「ブループリント」の略である
画像集 No.101のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


 ゲーム制作に限らず,開発ではファイル名などの名前付けが大切である。プロジェクトが肥大化していくにつれファイルが大量に増えていくが,それらの中身をいちいち見て役割を確認するのは,骨が折れる。
 ファイルが何の役割をしているのかが,名前だけで分かるのが理想だ。まあ理想通りにならないのが現実でもあるわけだが。

 ゲームエンジンやプログラミング言語などは,公式や団体が命名規則という「名前付けのルール」を公開していることが多い。あくまで管理をしやすくするためなので,必ずその通りにしろという訳ではないが参考にしよう。

命名規則 「名前付けのルール」のこと

Unreal Engineで推奨されている命名規則では,アセットのプレフィックス(名前の先頭)に,アセットのタイプを入力する
・ブループリント:BP_ 例.BP_SimpleTarget
・マテリアル:M_
・テクスチャ:T_
プレフィックス 単語などの先頭に付ける文字のこと
日本語にすると「接頭辞」

少ない文字数で,簡潔に役割や目的を示すために,プログラミングでよく使う表現である
「BP_SimpleTarget」の「BP_」が,これに相当する
なお,単語の先頭ではなく,末尾に付ける文字は「サフィックス」(接尾辞)という

 Unreal Engineで推奨されている命名規則に興味のある人は,下記サイトを参考にしてほしい。

Epic Developer Community
「アセットの命名規則に関する推奨事項」



9-6:「BP_SimpleTarget」をダブルクリックして開く。このような画面が表示されたらOKだ
画像集 No.102のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


 もし9-6と異なる画面が表示された場合,以下のどちらかを試してほしい。

画像集 No.103のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(A)「フルブループリントエディタを開く」を押す
画像集 No.104のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(B)「ビューポート」を押す


9-7:画面左上の「+追加」を押す
画像集 No.105のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-8:「キューブ」を選択する
画像集 No.106のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-9:立方体が追加される
画像集 No.107のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-10:赤枠で囲った部分の「エレメント0」からプルダウンメニューを開き,マテリアルを好きなものに変更しよう。「エレメント」は,オブジェクトのパーツに相当し,パーツごとにマテリアルを設定できるようになっている。今回,立方体は特にパーツ分けされていないのでエレメントが1つだけなのだ
画像集 No.108のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-11:「コンテンツ ドロワー」(Ctrl+Spaceバー)から「BP_SimpleTarget」をドラッグ&ドロップでレベルに配置してみる。そのままだと大きいことが分かる
画像集 No.049のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-12:サイズを調整する。これまで通りビューポート上でも,「詳細」の「トランスフォーム」からでも変更可能だ。筆者と同じにするならば「拡大・縮小」(スケール)を「0.4,0.1,0.4」としてほしい
画像集 No.110のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-13:スケールを「0.4,0.1,0.4」としてみた例
画像集 No.111のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

 次に,「的」に弾が当たった際の処理を実装する。各オブジェクトには,自身と何かが衝突したことを検知する機能があるので,「的」が衝突を検知したタイミングで,処理が動き出すように実装していこう。

 エアガンを使ったスポーツのサバイバルゲームだと,当てた人ではなく,当てられた人が「ヒット!」と叫んで退場するのだが,イメージはそんな感じである。撃たれた側に,処理を実行してもらおう。

 作業の前に,用語を2つ説明させてほしい。「イベント」と「トリガー」についてだ。
 何かをきっかけに動き始める処理を「イベント」,動かすきっかけのことを「トリガー」と呼ぶ。銃でイメージすると,「引き金を引く」ことがトリガーであり,それによって「銃弾が発射される」ことがイベントに相当する。

イベント 何かをきっかけに動き始める処理
トリガー イベントを動かすきっかけとなるもの

9-14:引き続き「BP_SimpleTarget」を編集する。先ほど追加した立方体に,「イベント」を追加する。「Cube」を右クリックして「イベントを追加」,その後「OnComponentHitを追加」を押す
画像集 No.112のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-15:「イベントグラフ」タブが自動的に開き,「On Component Hit(Cube)」が追加される。これは「Cube」が何かと衝突(ヒット)することをきっかけ(トリガー)に,動き出す処理(イベント)だ
画像集 No.113のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


 「イベントグラフ」タブを押すと,「ブループリント」用のエディタが表示される。ここに「ノード」と呼ばれるブロックを,組み合わせていくことで処理を実装していく。

イベントグラフ 「ブループリント」を開くと表示されるタブ
このタブを押すと,ブループリント用のエディタ「グラフエディタ」が表示され,その中の「グラフエリア」で編集作業を行える

※本記事では,用語による混乱を避けるため,ブループリントの編集画面も「イベントグラフ」と,まとめて表現する

[操作方法]
・移動:右ドラッグ
・拡大/縮小:マウスホイール
ブループリント ブロック状にまとまった機能を組み合わせることで,ゲームの処理実装するシステム
ノード 「ジャンプ」「横移動」「四則演算」「表示」など,さまざまな処理をそれぞれブロック状にしたもの

各ノードは「○○ノード」と表記する
例.「Jumpノード」

ノードの種類によって色が異なり,「イベント」は赤色で示される

例としてキャラクターの「ジャンプ処理」を見てみよう
画像集 No.114のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

 上記画像には,赤色と青色のブロックがあるが,この各ブロックがそれぞれの機能を持つ「ノード」である。
 基本的に赤いノードは「イベント」であり,何かをきっかけにして動作する。

 「EnhancedInputAction IA_Jumpノード」は,Spaceバーを押した/離した際に「トリガー」される「イベント」としてテンプレートに実装されている。
 Spaceバーを押した時に「Jumpノード」,Spaceバーを離した時に「Stop Jumpingノード」へとそれぞれ進む。

 処理は呼び出されない限り実行されないので,基本的に何かを実装する時は「イベントノード」(赤いノード)から始まり,そこに動かしたい処理の「ノード」を接続していくと覚えておこう。

EnhancedInputAction IA_Jumpノード
画像集 No.371のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう テンプレートに実装されている,プレイヤーの入力関連のイベントノード

Spaceバーの入力をトリガーとして,以下の動作となるように設定されている

・Spaceバーを押した
「Started」に接続したノードに進む

・Spaceバーを離した
「Completed」に接続したノードに進む
Jumpノード
画像集 No.372のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう キャラクターをジャンプさせるノード

ジャンプとは「上方向への力(速度)を加える」という処理
パラメータを変更すれば「一定時間上昇し続ける」処理も実装可能
Stop Jumpingノード
画像集 No.373のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう キャラクターのジャンプを止めるノード

ジャンプで加えられている「上方向への力(速度)」を止めるノード

 以下は,本記事の内容から少し脱線しているので,興味のある人向けの補足だ。

 「Jumpノード」は文字通り「ジャンプ」なのだが,「Stop Jumpingノード」,つまり「ジャンプを止める」とは何だ,と気になる人もいるだろう。
 実はジャンプと言っても,実際にキャラクターが上にあがる処理と,ジャンプのアニメーションはまったく関係のない別物である。キャラクターが足に力を入れてジャンプしていても,実際に足から地面に力を加えて上に飛んでいるのではなく,システム側から力を加えている(正確に言うと「垂直方向へ速度を与える処理」をしている)のだ。
 この力を加える処理が「Jumpノード」の役割であり,アニメーションはキャラクターの状態をもとに,別の処理で付け足すように再生されている。

 また,パラメータを変更することで「上昇し続ける時間」を変えることができる。「Stop Jumpingノード」は,この上昇し続ける処理を中断するものだ。
 勘のいい人は気づいたかもしれないが,ジャンプボタンを押した長さによって,ジャンプ力が変わるような処理を実装する際に「Stop Jumpingノード」が活躍する。
 ジャンプボタンを短く押す,つまり,「ボタン離す」トリガーによって「Stop Jumpingノード」がすぐに呼び出され,上昇する処理を中断し,低いジャンプ(小ジャンプ)を実現できる。

 なお,テンプレートのキャラクターは,ジャンプで「上昇し続ける時間の最大値」(JumpMaxHoldTime)が0.0になっているため,Spaceバーを長押ししてもジャンプ力の違いは確認できない。

説明を聞いたら試したい,という人もいるだろう。コンテンツ ドロワー(Ctrl+Spaceバー)から「BP_FirstPersonCharacter」を開こう。開いたら「クラスのデフォルト」を押して,画面右側の「詳細」で「JumpMax」と検索すれば,「Jump Max Hold Time」と「Jump Max Count」が表示される。前者からジャンプの最大継続時間と,ジャンプの最大実行回数だ。それぞれ値を増やせば,Spaceバー長押しで,ジェット噴射するように上昇したり,Spaceバーを連続で押して,多段ジャンプをしたりできる
画像集 No.375のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
画像集 No.374のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

 各ノードにはメモ書きを残すこともできる。このメモ書きのことを「コメント」と呼ぶ。
 開発中は「このノード,何で置いたんだっけ」と作業内容を忘れることがあるので,コメントを残す癖を付けていこう。

画像集 No.124のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(1)ノードの左上にマウスカーソルを合わせ,吹き出しを押す
画像集 No.125のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(2)入力ボックスが出現する
画像集 No.126のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(3)メモ書きを残していこう

コメント プログラムなどの中に残すメモ書きのこと

ファイルの名前の付け方で「命名規則」があるように,コメントにも規則や流派があったりする

本記事では,各ノードに「ノード自体の説明」をコメントで入れていることが多い
慣れてくると「ノード自体の説明」は不要になりがちだが,初心者のうちはコメントの練習にもなるので,気が向いたら自分なりにメモを残してみてほしい


9-16:赤い丸で示した部分は,「実行ピン」と呼ばれ,処理を繋ぐための点だ。このように,処理を繋ぐ点を「ピン」と呼ぶ。まずは,この「実行ピン」をマウスで左ドラッグしてみよう
画像集 No.115のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-17:すると白い線が伸びる。これを「ワイヤー」と呼び,処理を繋いでいく「実行ワイヤー」(白色)と,データを繋ぐ「データワイヤー」(いろいろな色)が存在する
画像集 No.116のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-18:ワイヤーを伸ばした状態でマウス左ボタンを離すと,「実行可能なアクション」が表示される
画像集 No.117のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-19:検索ボックスで,「Print String」を検索して選択する
画像集 No.118のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-20:「Print Stringノード」が追加され,「On Component Hit(Cube)ノード」の実行ピンと接続される
画像集 No.119のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-21:この状態でプレイすると,「的」を撃つたびに左上に「Hello」と表示される
画像集 No.341のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

ピン 処理やデータを繋ぐ「点」
「○」や野球のホームベースのような形などをしている

[実行ピン]
・処理を繋いでいくピン

[データピン]
・データのやり取りを行うピン
・データの種類によって色が異なる
ワイヤー 処理やデータを繋ぐ「線」
ワイヤーで繋いだ処理は,左から右へ流れるように進む
繋いだワイヤーは,Altキーを押しながら,ワイヤーを左クリックすれば削除可能

[実行ワイヤー]
・処理を繋いだワイヤー
・白色で表現される

[データワイヤー]
・データを繋いだワイヤー
・データの種類によって色が異なる

On Component Hit(Cube)ノード
画像集 No.302のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Cube」と何かが衝突(ヒット)した際に呼び出されるイベントノード
ノード名に含まれる「Cube」は,対象によって変化する

衝突した側と衝突された側,それぞれのオブジェクトの情報や,衝突した向きや位置などを取得可能
Print Stringノード
画像集 No.303のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 文字を画面上に表示するノード

データピン「In String」の横のテキストボックスを変更するか,ピンにデータを接続することで,表示する内容を変更できる


 「On Component Hit(Cube)ノード」は,何かがヒットするたびにトリガーされるため,プレイヤーが「的」に直接体をぶつけても「Hello」と表示される。
 「弾」がヒットした時だけに処理を変更するには,ヒットしたものが「弾」であるか,確かめる処理を実装する必要がある。

 テンプレートの「弾」は「BP_FirstPersonProjectile」というクラスを利用しているため,当たったものが「BP_FirstPersonProjectileクラス」であれば「弾」であり,そうでなければ「別のオブジェクト」だと判別ができる。

 この判別は「Cast To BP_FirstPersonProjectileノード」で実装可能だ。

(1)「Print Stringノード」を選択した状態で,Deleteキーを押して削除しよう。「On Component Hit(Cube)」の「Other Actorピン」から,ワイヤーを伸ばして「Cast To BP_FirstPersonProjectile」を追加する
画像集 No.304のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

(2)「Cast To BP_FirstPersonProjectileノード」の右側には2つの実行ピンがある。対象のオブジェクトが「BP_FirstPersonProjectileクラス」を持つなら上の実行ピン,そうでないなら下の実行ピンへ進む
画像集 No.305のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

(3)ワイヤーを伸ばして「Print Stringノード」を追加し,画像と同じように「Cast To BP_FirstPersonProjectileノード」の,右上の実行ピンと接続しよう
画像集 No.306のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

 画像のようにノードを配置することで,プレイヤーが「的」にぶつかっても「Hello」と表示されなくなった。

Cast To BP_FirstPersonProjectileノード
画像集 No.307のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Objectピン」に接続されたものが「BP_FirstPersonProjectileクラス」を持っていたら,上の実行ピンへ,そうでないなら下の「Cast Failed」と書かれた実行ピンへ進むノード

次章にて似たようなノードを別の使い方で使用するため,詳しい説明は後ほど行う


 なお,現状では,同じ「的」に複数回弾がヒットしたら,その分だけ「Hello」が表示される。
 このまま「的」にスコア処理を追加したら,同じ「的」を何度も撃って無限にスコアを稼げてしまう。処理を1回だけする「Do Once」というノードを追加し,スコアの荒稼ぎを阻止しよう。

画像のように「Do Onceノード」を追加する。このノードは,右の実行ピンに接続された処理を,1度だけしか実行しないように処理の流れを止める機能を持つ。これを追加することで同じ「的」を使った得点の増殖を防げる
画像集 No.269のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

Do Onceノード
画像集 No.308のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Completedピン」(右の実行ピン)に接続された処理の実行を,1度だけにするノード

左側の実行ピンに「Reset」と書かれたピンがある
これに何らかのノードからワイヤーを繋いで処理を流すと,「Do Onceノード」がリセットされ,「Completedピン」に接続された処理を,再び実行できる状態になる
そして,右の処理を1度したら,再びリセットされるまで右の処理をしない

 「Do Onceノード」は必ず,「Cast To BP_FirstPersonProjectileノード」の後に配置しよう。
 もし前に設置してしまうと,プレイヤーがぶつかった時も「Do Onceノード」が動作し,それ以降,銃で撃っても処理が動かないので注意だ。
 弾が当たった際の処理を,1回だけにする(1回は必ず実行できるようにする)ことが重要である。


 「Hello」の表示に続けて,「的」が撃たれた時の変化を加えてみよう。ヒットエフェクトは,FPSの気持ちよさに直結する。
 まずは,「的」を撃ち「落とせる」ようにしてみよう。撃たれたタイミングで「的」の物理演算を有効にすれば,空中にある「的」は自由落下する。

 物理演算と聞いて「何かさっき触ったような気がする」,という人がいれば鋭い。前のページで,レベル上にある青い箱について説明した際に,物理演算は「Simulate Physics」というオプションで有効/無効を切り替えられることを説明した。
 つまり,撃たれたタイミングで「Simulate Physics」を有効にするだけで実装完了だ。

9-22:落下する処理を加えよう。「Print Stringノード」の実行ピンからワイヤーを伸ばし,「Set Simulate Physics (Cube)」を選択しよう
画像集 No.121のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-23:追加されたノードの「Simulate」にチェックを入れよう。これは,エディタ上で編集した「Simulate Physics」の設定を,ブループリント上で行っている
画像集 No.122のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

9-24:弾を当てると「的」の物理演算が有効になり,重力で落ちるようになった
画像集 No.348のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


 FPSはやっぱり音とエフェクトがあったほうが,弾を当てた感じがより出て気持ち良い。スターターコンテンツにある素材を使って,ヒット音と爆発エフェクトを実装しよう。

 まずヒット音を実装しよう。今回は「Play Sound at Locationノード」を利用する。このノードは,指定した位置(座標)で音を鳴らすことができる。遠くで鳴らせば音は小さく,近くで鳴らせば大きく聞こえる。
 今回は「的」が撃たれたら,「的」の座標でヒット音を鳴らす処理を実装する。オブジェクトの座標を取得するには,「Get Actor Locationノード」を使う。このノードで取得した座標を「Play Sound at Locationノード」に伝えれば,「的」の位置で音を鳴らせる。

Play Sound at Locationノード
画像集 No.311のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 3D空間で音を鳴らすノード

「Sound」に設定した音を鳴らす
音は「Location」で指定した座標で再生されるため,プレイヤーから遠くの場所を指定すると音は小さく,近くの場所を指定すると大きく聞こえる
Get Actor Locationノード
画像集 No.310のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Target」に指定した「Actorクラス」の位置を取得するノード

デフォルトでは「self」が設定されており,自分自身の位置を取得するようになっている
取得した座標は「Return Value」として,他のデータピンに接続することで座標のデータを送れる

画像集 No.127のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(1)「Play Sound at Locationノード」を追加
画像集 No.128のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(2)「Sound」のプルダウンメニューから,「Explosion_Cue」を指定
画像集 No.129のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(3)空いている場所を右クリックして,「Get Actor Locationノード」を追加
画像集 No.130のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(4)座標のデータは黄色で表現されている。図のように,黄色のデータピン同士を接続しよう

 なお「Sound」を選択する際,「サウンドウェーブ」と「サウンドキュー」の2種類が表示されるだろう。前者は音源となるwavファイルをそのままアセット化したもので,それを編集して再生するものが後者だ。
 今回選択した「Explosion_Cue」は,サウンドウェーブ「Explosion01」と「Explosion02」のうち一方を,ランダムで再生する処理をしている。


 この状態でプレイすると,弾を当てた時に「的」から爆発音がなる。
 とはいえ銃の発射音が大きくてスピーカーだと分かりにくいので,目に見えるエフェクトも付けよう。スターターコンテンツには「爆発エフェクト」も用意されているので,これを「的」の位置で発生させることで,エフェクトを表示するようにする。
 使用するのは「Spawn Emitter at Locationノード」だ。先ほどのヒット音の実装と同じく,「的」の位置を伝える必要がある。

Spawn Emitter at Locationノード
画像集 No.312のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 位置を指定して,エフェクトをレベル上に表示するノード

「Emitter Template」に指定したエフェクトを表示でき,その位置は「Location」で指定する
ほかにも「Rotation」で向き,「Scale」で大きさを設定可能


画像集 No.131のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(1)「Spawn Emitter at Locationノード」を追加
画像集 No.132のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(2)「Emitter Template」のプルダウンメニューから,「P_Explosion」を指定
画像集 No.133のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(3)「Get Actor Locationノード」の「Return Valueピン」から,「Locationピン」にワイヤーを接続する
画像集 No.134のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
(4)「的」を撃つと,爆発エフェクトが表示されるようになった

 なお,本記事では「Spawn Emitter at Locationノード」を利用した方法について紹介した。実のところ,これは少し古いシステムで,現在主流の「Niagara」というシステムのエフェクトを使う場合は,別のノードを使うことになる。
 名前を紹介すると,「Spawn System at Locationノード」だ。名前が似ているように,ノードの使い方が大きく変わることはないので安心してほしい。

Spawn System at Locationノード
画像集 No.347のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Niagara VFX System」(外部リンク)で作成したエフェクトを,レベル上に表示するノード

Niagara
VFX
System
UE5で標準のエフェクトシステム

ベースとなるエフェクトの「Niagara エミッタ」と,それらを組み合わせて管理する「Niagara システム」の2つで構成される
エフェクトを細かく素材(アセット)にして管理できるため,再利用性が高いなど,「Cascade」よりも高性能なエフェクトシステムである

「Spawn System at Locationノード」の名前に含まれる「System」は,「Niagara システム」のことだ
Cascade
Particle
Systems
UE5以前に主に使われていたエフェクトシステム

「Niagara」で「エミッタ」「システム」に相当するものが,1つのアセットで構成される

UE5から非推奨となり,廃止が予定されている
なお,UE5.3.2時点では,レガシー(旧型)システムとして残っている

 今後,ゲーム開発をしていく上で,スターターコンテンツ以外の素材を試す機会があるだろう。その際,エフェクトの表示は「別のノードを使うかもしれない」とだけ覚えておいてほしい。


 本章の内容をすべて行った例を以下に示す。

・BP_SimpleTarget
 - 物理演算処理の設定
 - ヒットしたオブジェクトの判定
 - 処理の重複対策(一度だけ処理)
 - Actorの位置取得
 - 音の3D空間再生
 - 爆発エフェクトの表示


BP_SimpleTarget
画像集 No.382のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

  • 関連タイトル:

    Unreal Engine

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:11月27日〜11月28日