テンプレ通りのゲーム制作 FPS⓵当たったら消える的を作る
FPSテンプレートプロジェクトの作成
この記事ではまず、FPSテンプレートプロジェクトを使って、FPSゲームを作っていきます。UnrealEngineにはテンプレートプロジェクトを作成する仕組みがあり、使わない手はありません。プロジェクトの作り方はこちらで紹介しています。
このテンプレートを使って、破壊可能なターゲット、点数の表示、ターゲットの移動、キャラクターの表示などを学んでいきましょう。理屈はおいといて形になる事を優先します。
作ったFPSを遊んでみよう
設定したFPSテンプレートプロジェクトを立ち上げます。
UE5になって実装されたコンテンツドロワーを出すためのショートカットはCTRL+SPACEです。出しっぱなしにしておきたい場合は下記のように「レイアウトにドッキング」ボタンを押しましょう。
上部の緑の再生ボタンを押します。
ゲーム画面が始まります。キーボードのWASDで前後左右に移動、マウスの前後左右でカメラ視点操作、マウス左クリックで弾丸発射です。最初は銃を持っていませんが、目の前に浮いているものを前進して取得すれば装備して撃てるようになります。これだけでも結構面白いですね。青い箱は弾が当たるとはじけ飛びます。
ゲームの土台が出来てる!
弾のブループリントをいじってみる
さて、ここまではエピックゲームズ様が用意してくれているFPSテンプレートです。ここからどうアレンジするかがゲームクリエイターの腕の見せ所です。ここからプログラムを追加…と行きたいところですがまずは今のテンプレートの仕組みを勉強のために見てみましょう。
1.コンテンツブラウザで一番上の階層をクリックします。
2.フィルタで「ブループリントクラス」にチェックを入れます。
表示フィルタをかける
フィルタをかけることにより、このプロジェクトのクラスブループリントだけを表示することができます。クラスブループリントはブループリントの中でも「クラス」に紐づいたプログラムです。クラスとは設計図のようなものであり、ワールドにドラッグすることで「インスタンス(実体化)できます。このなかで、”BP_FirstPersonProjectile”をダブルクリックします。ブループリントエディタが開きます。
ブループリントが開いたら一つやっておきたいことがあります。おそらくフローティング状態でウィンドウが開くと思いますので、タブをドラッグして上端に持って行ってください。ウィンドウが最大サイズになりますのではなします。この状態にすれば先ほどの基本のエディタ画面と切り替えられて便利です。覚えておきましょう。
開いたブループリントエディタにはすでに弾丸が物理オブジェクトに当たった際のプログラムが書かれています。今回は弾側のブループリントのノードは修正しませんが、とりあえず左上のコンポーネントパネル内、「ProjectileMovement」をクリックして右の詳細パネルに注目してみます。
ブループリントエディタの内容
詳細パネルの表示が「ProjectileMovement」の内容について表示されたら画像のようにパラメータを変更してください。
- 初速と最高速を意味する「Initial Speed」「Max Speed」ともに300.0に
- 重力を意味する「Gravity Scale」を0.0に
さらに上部の「クラスのデフォルト」を押します。
詳細パネルの検索テキストボックスに「life」と打ち込んで「Initial Life Span」を0.0にします。
変更出来たらブループリントエディタ内にも存在する上部の緑の再生ボタンを押します。
ゲームの雰囲気が変わった!
弾のスピードが10分の1に落ち、重力が無くなったことによって落下することが無くなりました。さらにLife Spanという弾の寿命を3.0 → 0.0に変更したことにより、寿命が0になるのではなく無限になり、発射しただけゲーム内に残ることになりました。まるで無重力空間のようです。このようにパラメータを変えるだけでゲームバランスを変えることができますね。確認が出来たら弾速と重力をそれぞれ3000.0と1.0に戻しておいてください。弾のライフスパン(寿命)はさっきより少し長い10.0にします。
弾が当たったら消えるブロックを作る
現在は青いボックスに弾が当たったらはじけ飛びますが破壊することは出来ません。これを壊せるようにします。コンテンツブラウザ内の「コンテンツ」を選択して右クリックして新規フォルダを作成し「Blueprints」という名前にします。この階層の中の空いている場所で右クリックしポップアップメニューから「ブループリントクラス」を選びます。
Blueprintsフォルダを作成
新規ブループリントクラスを作成
親クラスを選択するパネルが出ますので「Actor」クラスを選択します。これはC++プログラミングでいうところの「継承」を行っています。親クラスの持つ機能を「継承」して新しいブループリントクラスを作ろうとしています。名前を「BP_Target」にして先ほど作ったBlueprintsフォルダに保存します。
作ったBP_Targetをダブルクリックして開きます。開いたブループリントエディタの左上のコンポーネントパネル内の+プラスボタンを押して「StaticMesh」を追加します。コンポーネントとはクラスブループリント内のパーツです。一つのクラスブループリントに複数のコンポーネントを内包できます。
詳細パネル内のStaticMesh項目のプルダウンを選び「SM_ChamferCube」を選びます。青いボックスが目印です。
SM_ChamferCubeを選ぶ
さらにマテリアル項目のプルダウンを選び、検索ボックスに「gold」と打ち込んで絞り込んだ金色のマテリアルM_Metal_Goldに変更しておきましょう。変更出来たらコンパイルしてクラスブループリントを保存します。
マテリアルを金色に
ブループリントエディタからレベルエディタに戻ります。UnrealEngineではステージの事を「レベル」と言います。厳密に言うとステージ=レベルではないのですが、このサイトではステージのことを便宜上レベルと呼ばせてもらいます。レベル内に存在する青いボックスをどれでもいいので選択しSHIFT+Eを押します。SHIFT+Eを押すと選択しているアクタ(オブジェクト)とレベル内の同種のアクターがすべて選ばれます。便利なショートカットなので覚えておきましょう!
同じActorを全選択できます
選択した青いボックスと今作ったBP_Targeを置き換えるためにあらかじめコンテンツブラウザ内でBP_Targetを選んでおき、レベル内の選択状態の青いボックスを右クリックして「選択中のアクタと置換」ですべてBP_Targetに置き換えます。
弾のブループリントに当たった相手を消す処理を追加する
現在のFPSテンプレートは物理計算をしているボックスに当たると弾の方が消える(DestroyActor)という処理が行われています。これに合わせて新しいクラスブループリントも物理オブジェクトに設定します。BP_Targetを開き、コンポーネントパネルでStaticMeshをDefaultSceneRootに重ねてStaticMeshをRootにします。
次にStaticMeshをコンポーネントパネルで選んだ状態で詳細パネルの検索テキストボックスに「Physics」と打ち込みます。絞り込んだ結果の中に「Simulate Physics」を見つけたらチェックを入れます、これで以前同様に青いボックスがはじけ飛びます。
弾のブループリントを開きます。ブループリントの一番最後、「DestroyActor」の横にもうひとつ「DestroyActor」を実行ピンから伸ばして作ります。Targetから上に伸ばしてRerootノードをつくります。RerootノードをEvent HitのOtherまで伸ばしてつなぎます。これで弾とボックスの両方が消えます。
破壊されるボックスにエフェクトと爆発音を付ける
最後に破壊されるボックスにエフェクトと爆発音を付けましょう。どちらもスターターコンテンツのアセットを利用します。BP_Targetを開き、「Event‗Destroyed」というノードを右クリックして空いているところに作ります。この「イベント」というのはゲーム途中の「出来事」であり、「発火点」でもあります。ゲームはこのイベントが起こった時に何をするか処理を書いていきます。このことを「イベントドリブン」といいます。
BP_TargetのDestroyedイベントを記述する
「Spawn Emitter At Location」ノードと「Play Sound 2D」というノードをつなぎ、「P‗Explosion」というパーティクルエフェクトと「Explosion Cue」という効果音をのーどで指定します。Location(場所)をどちらも指定しないといけませんが、「Get Actor Location」(self)で自分自身、つまりBP_Targetの原点の場所をしています。これで弾が当たった時に爆発するようになりました!
これで弾が当たった時に爆発音とともに消える!
弾が当たったら爆発して消えるというだけの簡単な処理でしたが、シューティングやアクションゲームの弾を扱う処理の基本となりますのでしっかり覚えていってくださいね。
Discussion