2017/04/14

UE4のVRテンプレートを利用してミニゲームを作ってみよう!(一応の最終回)

blog-post-10-content

この記事は以下のような方を対象としています。
_____________

  • VR機器を持っていて、UE4でとりあえず使ってみたい方
  • UE4での経験がまだ浅い方

_____________

前提のスキルとして
_____________

  • UE4のエディタの操作方法がわかる

_____________

があればOKです。


また、先に前回前々回を読んでから、この記事を読み始めていただきたいです。

こんにちは、名残惜しいですが『パンチングゲーム制作』は今回で一旦の最終回です。
最後までしっかりやっていきましょう!

さて、前回まででは
『敵のBPの追加』
『敵のパラメータを設定』
『敵の移動処理』
『敵が死亡したら消える処理』
をやってきました。

今回はついに 『攻撃時に敵を死亡させる処理』
『プレイヤーが敵に攻撃する処理』
『レベルそのものの設定』
『プレイ中に敵をスポーンさせる処理』
『出来上がったものを試しにプレイ』
をやっていきます


11.敵のブループリントを実装しよう!(ラスト)

敵のブループリントもこれで最後です。
これまでに 『生存している間、移動する処理』『死亡したら消える処理』 を実装してきました。
そうなると、残っている処理は 『生存/死亡を切り替える処理』 です。

最初の仕様の通り、生存/死亡が切り替わるタイミングとは 『プレイヤーに殴られた時』 となります。 プレイヤーに殴られた時に呼び出されるイベントに、生死を切り替える処理 を実装しましょう。

もしかしたら忘れている方もいるかもしれませんが、こういう時こそ 『BPインターフェイス』 を利用します。
画面上の 『クラス設定』 を選択し、『詳細ウィンドウ』の『インターフェース』→『実装インターフェース』に、初期に作成した 『PunchingInterface』を追加 しましょう。
これで、殴られたとき用のイベントが追加できるようになります。

blog-post-10-content2

ブループリント上で右クリックを行い、これまた最初に作成した『Punching』イベントを追加しましょう。
(インターフェイス追加後にコンパイルしないと表示されないので要注意です) これが殴られた時に呼び出されるイベントです。
あとはこの先に生死を切り替える処理を実装しましょう。
生死を判定している変数とは、そう、『IsAlive』 です。
『IsAlive』をFalseに変えてしまえば 敵の実装も完了です!

blog-post-10-content3


12.ブループリントを修正しよう!(ラスト)

敵のBP実装が終わったところで、今度はテンプレートのBPに 一部処理を追加 します。
追加する箇所は 『BP_MotionController』 です。
処理を追加するといってもノード2つだけなので身構えないで大丈夫です。
『イベント ActorBeginOverlap』 ノードに、先ほど敵側のBPで作成した
『Punching』の呼び出し処理 を繋げるだけでOKです。

blog-post-10-content4

これで、プレイヤーの拳が敵に触れたタイミングで
敵側の死亡処理が呼び出されるようになります。
ちょこんと触れただけで死亡してしまうのは違和感があるかもしれませんが、
今回はテスト目的なので気にしないことにします。
ちなみに手のコリジョンは掴み状態(攻撃モード)じゃないとONにならないように 最初から実装されています。
このような 『テンプレート側で既に行われている処理』については、また後日に説明します。


13.レベルに必要なデータを配置しよう!

ようやく、レベルそのものを弄るときが来ました。
今回は見やすさを追求して、見下ろしカメラでの編集をお勧めします。
見下ろしモードにするためには、エディタの左上から『上』を選択する だけです。

まず、マップの中心に 『MotionControllerPawn』 を配置しましょう。これがプレイヤーになります。
『詳細ウィンドウ』の『AutoPossessPlayer』にプレイヤーのポーンを設定するのをお忘れなく。 これは VR以外でも必要な処理です。

blog-post-10-content5

続いて、エネミーをスポーンさせるポイント を配置します。
そして、モードウィンドウから 『ターゲットポイント』 を以下の画像のようにマップ四方に配置しましょう。 ターゲットポイントが見つからない場合は、モードウィンドウで 『ターゲットポイント』と検索 すれば大丈夫です。 一応、配置が終わったのちに編集視点を『パースペクティブ』に戻し、細かい修正もしておきましょう。
これでレベルへのアクタ配置は終了、いよいよ最後に エネミーをスポーンさせる処理 を行います。

blog-post-10-content6


14.レベルブループリントを編集しよう!

『ツールバー』の『ブループリント』→『レベルブループリントを開く』と選択して、 『レベルブループリント』 を開きましょう。ターゲットポイント等、レベル側の処理は『レベルブループリント』で行われます。

ここで、エネミーを出現させる処理を行います。 エディタ上でターゲットポイントをクリックしておく と、レベルブループリントでもリファレンスを取得できます。 そして、Tick内で『Delay』を行い、その後に 『クラスからアクタをスポーンします』 のノードを繋げます。 このノードは、引数Classを引数SpawnTransformの場所にスポーンさせる 処理です。 今回はターゲットポイントの位置にスポーンさせるため、ターゲットポイントのリファレンスから 『GetActorTransform』 で位置を取得して引数に設定しています。

スポーンさせるのはもちろん敵キャラのため 『BP_Enemy_Ball』をClassに設定 しましょう。

blog-post-10-content7

その後、残りのターゲットポイントからもスポーンさせるように実装します。
以下の画像では少しだけ出現タイミングをずらすため、一つのポイントからスポーン後に『Delay』を使用しています。
ぶっちゃけここももっといい方法がありますが、今回はテスト目的なので気にしないように。
(この記事シリーズ、こればかりな気がします)

blog-post-10-content8


15.(一応の)完成!

試しにプレイ してみましょう! 一応、最初に提示した通りの仕様でゲームが動作しているはずです! なお、VRでの起動は 『VR プレビュー』を選択しないとできない ので、そこだけ要注意です。 ちなみに、『VRプレビュー』はUE4起動時点でHMDが接続できていないと選択できませんので、注意してください。

blog-post-10-content

ただ、ある程度プレイしてみればわかりますが、
今のままでは
『非常に単調』
『敵のパターンが同じでつまらない』
『出現スピードと出現量が嚙み合っておらずフィールドから溢れてしまう』
『ゲームオーバーがないので緊張感も何もない』
などと 問題が山積み であることがわかります。

ここからは読者の皆様が、自分なりに色々と試して作っていきましょう。
きっと、いいゲームが作れるはずです。

全3回、テンプレートを利用したパンチングゲーム制作はこれにて一応終了です。

ですが、まだまだ 解説していない処理も多い です。
例えば、『VRテンプレートで最初から用意されている処理』 とか。

次回からは、そういった 『最初から用意されている処理』 についての説明をします。
(もしかしたらパンチングゲームのブラッシュアップもやっていくかも…?)