読者です 読者をやめる 読者になる 読者になる

UnrealEngine奮闘記

アンリアルエンジンでの開発やTIPSをまとめたblogです

横スクロールアクションを作る その4レベルの作成

今回で横スクロールアクションも最終回となりました。
最後はレベルを作ります。
f:id:swiftnest:20140614062359j:plain:w460

Geometry Brushでレベルの基礎を作成する

まずGeometry Brushでレベルの基礎を作成していきます。
f:id:swiftnest:20140613224737j:plain

Geometry Brushのドキュメント(日本語)
Unreal Engine | ジオメトリ ブラシ アクタ

モードを「Geometry Editing」に合わせると、Geometry Brushの頂点を編集する事も出来ます。
f:id:swiftnest:20140613225350j:plain:w460

また、Brush Typeを「Subtractive」にすると、Geometry Brushの形で削除することができます。
床に穴を開けたい場合などに非常に便利です。
f:id:swiftnest:20140613230358j:plain:w460

この際、断面の色はGeometry Brushのマテリアルの色になります。

Geometry Brushのマテリアルを変えるのはダブルクリックで面を選択し、指定マテリアル選択後に「Apply Material」を押します。Geometry Brush全体の色を変えるには、「Select」の中の「Select Matching Brush」を選択後にApply Materialを押します。
f:id:swiftnest:20140613231346j:plain:w460

その他、Surface PropertiesのScaleでテクスチャサイズを変えたり、Rotateでテクスチャを回転させたり、Panでテスクチャの位置をズラしたりすることが出来ます。
f:id:swiftnest:20140613232150j:plain:w460

コインを作成する

次に定番のコインを作ってみます。

まず先にインベーダーゲームその8を参考に、HUDとBlueprint Interfacesを作成します。
Blueprint InterfacesにはAdd Coin関数を作成し、HUDでコイン数を表示するようにします。
f:id:swiftnest:20140613234145j:plain:w460
f:id:swiftnest:20140613234335j:plain:w460

次にClass Actorを作成し、Componentにコインモデルを設定します。その際にZに70を設定し、浮かせる様にします。
f:id:swiftnest:20140613235244j:plain:w460

なお、コインのモデルは前回のUFOと同じくContentExamplesから持ってきました。
/Game/ExampleContent/SM_Pickup_Coin

その後Bluepintでコインを回します。
また、Event Actor Begin Overlapが呼ばれた際に、Blueprint InterfacesのAdd Coinを通じてHUDにコインの枚数を加算します。
f:id:swiftnest:20140614000458j:plain:w460

Volumeでギミックの作成

次はレベルにVolumeを設定してギミックを作成していきます。
ボリュームとはレベル内に設定できる特殊な3D領域の事で、幾つか種類があります

■ドキュメント(日本語)
Unreal Engine | ボリュームに関するユーザーガイド

PainVolume

PainVolumeに接触すると、Actorにダメージイベントが毎時発生します。
このボリュームを設定して、穴に落ちると死亡やトゲなどを作成ます。

まず大きなPainVolumeを床の下に敷きます。
これだけで床から落ちるとキャラクターが死亡することになります。

次にトゲを作ってみます。
三角錐のブラシを複数設置し、グループ後にメッシュ化します。
この流れは以前インベーダーゲームの敵モデルを作った際にも行いました。
http://unrealengine-blog.hatenablog.com/entry/2014/04/27/211646

次にこのトゲの上にPainVolumeを設置します。
この時、トゲとPainVolumeを親子関係にします。
後は適切な場所に設置するだけです。
トゲを増やしたい場合はALTを押しながらドラッグで複製します。
f:id:swiftnest:20140614002612j:plain

Blueprintを全く書かずにトゲのギミックが完成しました。

折角なので、他のVolumeを利用して、Blueprintを書かずにギミックを作ってみます。

Physics Volume

この領域内のキャラに対し、重力や摩擦量を変化させることが出来ます
適当な場所に配置し、Terminal Velocityの値を普通のジャンプより低くします。
また、ぱっと見で判るように床のテクスチャを変えます。
ジャンプ力が低くなっているので、敵を倒したり、穴を飛び越えるのが非常に大変になります。
f:id:swiftnest:20140614002918j:plain:w460

Post Process Volume

この領域内に「カメラが」入った際に、ポストプロセスが掛かります。

■ポストプロセスのドキュメント(一部英語)
https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/index.html

例えばScene Colorの「Vignette Intensity」の値に4を入れます。
f:id:swiftnest:20140614003411j:plain:w460

カメラがこの領域に入ると、スポット処理の様な効果になります。
f:id:swiftnest:20140614003729j:plain:w460

ちなみにSideScrollerのプロジェクトには、あらかじめGlobalPostProcessという名前でPost Process Volumeが設定されています。
デフォルトでは画面全域のチェックが入っているため、Post Process Volumeを作っても反映されません。
そこで、Post Process VolumeのPriorityを1に設定します。

Trigger Volume

LevelBlueprintに、このVolumeに触れたらゴールの処理を書き、ゴール地点に配置します。
今回は火花を出すようにしました。
P_Sparksのエフェクトをゴールに設置し、Visibleのチェックを外します。
Trigger Volumeを選択した状態で「Level Blueprint」を開き、OnActorBeginOverlapイベント作成します。
その後、P_Sparksを選択した状態で右クリックし、「Set Vibility」のチェックを入れます。
f:id:swiftnest:20140614004039j:plain:w460

後は音楽やエフェクト、クリアー時間などを整えれば完成です。