UE4ゲーム制作入門十四日目

一人UE4ゲーム制作入門アドベントカレンダー十四日目です。

やっぱりステージ遷移のロジックはどこかにまとめておいたほうがいいので作り直します。あとボス。

ボスマップを作る


まずは遷移先を揃えておいたほうがいいので、新しくレベルを作り、BossMapと名前をつけましょう。

見た目は今は気にしないので適当に作ります。

ボスマップ

ボスマップのレベルブループリントにも処理を追加します。プレイヤーの位置をボスマップのPlayerStartの位置へとテレポートさせています。

ボスマップのレベルブループリント

作ったら、パーシスタントレベルのサブレベルにしておいてください。

ボスを作る


さっきのスクショに写ってましたが、ボスを作ります。BP_Enemyから子クラスを作り、BP_Enemy_Bossと名前をつけます。

スケルタルメッシュには、InfinityBladeのSK_Enemy_FrostGiant_Captainを使います。

BP_Boss.png

処理はこれだけ。死んだらリザルトへ。実際に動くのは明日以降になります。

Bossの実装部分

管理用の列挙体を準備する


ステージを作成していきましょう。

まずは、ステージの管理用に列挙体を用意します。コンテンツブラウザ上で右クリックして、Blueprintsから列挙体(Enumeration)を選びます。

列挙体の名前はEN_Stageとしておきます。作った列挙体をダブルクリックで開き、スクショのように値を設定します。

ステージ管理用列挙体

ステージ遷移をゲームモードで行う


基本的に常にレベル上に存在しているアクターだと思うので、ここに実装しておきます。

ChangeStage

基本的にはこの関数を外から呼ぶことになります。列挙体の値で新しくロードするレベルと消すレベルの名前を、実装した関数のGetLevelNameから変数に設定しています。

そして最後にカスタムイベントで実際にレベルを移すInitStageを実行しています。

ChangeStage.png

GetLevelName

列挙体の名前をStringに変換して、からName変数にして返しています。

GetLevelName.png

InitStage

関数の中ではLoadStreamLevelとUnLoadStreamLevelは呼び出せないのでカスタムイベントで遷移を行います。

UnLoadLevelNameはNONEの場合、UnLoad処理を飛ばします。Loadの方はそもそもLoadしない状況にはならないので、ただLoadしています。

InitStage.png

遷移を行っていた部分を置き換える


パーシスタントレベルブループリントの変更点

ゲーム開始時にタイトルを読み込んでいるのでそこを変更します。UnLoadするレベルは存在しないので引数UnLoadにはNONEを設定します。

パーシスタントレベル

WG_Titleの変更点

タイトルからゲームレベルへの移行部分。

WG_Titleの変更点

BP_Playerの変更点

死亡時にリザルトを呼び出しています。

BP_Playerの変更点

ボスマップへの遷移をつくる


ボスマップへの移動はこのゲームではテレポートポイント的なのを用意します。ブループリントクラスを新しくActorを親クラスとして作ります。名前はBP_MoveStreamingMapActorです。長いし汚い

オーバーラップのコリジョンを持つだけのアクターです。とりあえずですので、後ほどパーティクルなりメッシュなりで見た目を扉かテレポートポイントっぽいなにかにします。

BP_MoveStreamingMapActor.png

移動部分。ボックスコリジョンに入ったらレベルを読み込みます。ボスマップには読み込まれた瞬間にプレイヤーをボスマップの初期位置へと移動させる処理を持っているので、これでボスマップへと自動でワープします。

BP_Move以下略のイベントグラフ

ボスマップをサブレベルにし、ワープポイントのアクターを適当な場所に配置してきちんとMainをUnLoad、BossMapをLoadに設定します。

きちんとボスの前に移動したあと、ボスに弾を当ててリザルト画面がでたらオッケーです。