2017/04/13

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

2017/04/14:記事の文章にあった間違いを修正しました。
トランスフォームの可動性を変更しないと動かせませんね…。
失礼しました。

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

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

_____________

前提のスキルとして
_____________

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

_____________

があればOKです。


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

こんにちは、前回から始まった『パンチングゲーム製作』。
わかりやすく説明できたでしょうか?

さて、前回までは

『VRテンプレートでのプロジェクト作成』
『不要なBPの削除』
『BPインターフェイスの作成』

をやってきました。

今回は

『敵のBPの追加』
『敵のパラメータを設定』
『敵の移動処理』
『敵が死亡したら消える処理』

を実装していきます。

ガリガリ、というほどではありませんが、
それなりに本格的にBPを弄っていきますので、気を引き締めましょう!


6. 敵を追加しよう!

ついに敵キャラを作ります。
『新規追加』→『ブループリント クラス』で 新しいBPを作成 します。
StaticMeshActorを継承 しましょう。

球体型の敵にしようと思うので、『BP_Enemy_Ball』と名付けましょう。


7. 敵のパラメータを設定しよう!

さて、今のままだと何も見えません。
敵の姿を追加していないためです。

敵のBPを開いて、『StaticMeshComponent』の『StaticMesh』 を変更し、敵の姿を設定しましょう。 今回は最初からUE4に用意されている『SM_Ball_01』を使用します。 エンジンのコンテンツを可視化しないと使えないので、そこだけ注意です。
続いて StaticMeshComponent を、以下のように変更してください。

  • 「トランスフォーム」の「可動性」を ムーバブル に変更。
  • 「Physics」の「Simulate Physics」を True。
  • 「Collision」の「SimulationGeneratesHitEvents」を True。
  • 「Collision」の「オーバーラップイベントを発生させる」を True。
  • 「Collision」の「コリジョンププリセット」を PhysicsActor に変更。

ここでの変更はUE4で衝突判定をとりたい場合、必須になります。
絶対に忘れないようにしましょう。
なお、著者は過去にこの設定を忘れ、かなりの時間を無駄にしたことがあります。

blog-post-09-content


8. 敵のブループリントを実装しよう!(その1)

いよいよブループリントを作成していきます。
敵のブループリントを開きます。
今はまだ、特に何も処理は書かれていないはずです。
(作ったばかりですから当然ですね)
これから移動のための処理をここに追加します。
まずは bool型の変数 を作成します。
この変数は敵の生存・死亡判定に使用しますので、「IsAlive」 とでも名付けましょう。
Tickノードとブランチノードを接続し、条件式には変数IsAlive を設定します。
敵の死亡時・生存時に別々の処理を行うためです。

続いて、『AddWorldOffset』 ノードを作成し、先ほどのブランチのTrueに繋げます。
作成した時に一緒に出てくると思いますが、引数ターゲットに何も繋がっていない場合はコンポーネントのウィンドウから「StaticMeshComponent」をドラッグ&ドロップして繋げましょう。

『AddWorldOffset』ノードは引数に指定したターゲットに対して、引数DeltaLocationだけ移動させる処理 です。

blog-post-09-content2


9. 敵のブループリントを実装しよう!(その2)

移動するための処理を追加したはいですが、まだ敵は移動しません。
DeltaLocationの値に何も設定されていない からです。
次は、DeltaLocationの値を設定していきます。

ここに値には敵から見たプレイヤーの向きを設定すれば大丈夫です。
敵から見たプレイヤーの向きの計算式は以下のようにノードを繋げればわかるはずです。

blog-post-09-content3

プレイヤー位置 (GetPlayerPawn→GetActorLocation) から
敵キャラの現在位置 (GetActorLocation) を減算し、
その値を正規化 (Normalize) しています。
この値をDeltaLocationに繋げましょう。

これにて、基本的な移動処理は完成になります。
ほんとはもっといい別の方法があるのですが、今回はテスト目的なのでこれで十分です。


10. 敵のブループリントを実装しよう!(その3)

今度は、死亡した時の処理を追加します。
先ほどのブランチのFalseから 『Delay』 ノードに繋いだのち、『DestroyActor』ノードとも繋げます。

引数の値は3ぐらいでいいでしょう。
『DestroyActor』ノードは、アクタを丸ごと消してしまう ノード、
『Delay』ノードは 引数に指定した時間だけ処理を止める ノードです。
(Delayは 本来多用しない方がいい と思いますが…)

blog-post-09-content4

中途半端なところで申し訳ありませんが、今回はこれでおしまいです。
次回はついに敵キャラが完成、メインの部分を実装していきます!