その他のアセット

背景

実装的には今回もっとも苦労のなかったパートで、
Unreal Engine の利点が一番感じられた箇所でした。
アーティストが素材をシーンにぽんぽん置いていく。で出来上がってくれます。


●昼夜遷移

リアルタイムに時間が移り変わっていくので、そのための処理をちょこちょこ施しています。


天球にはテンプレートのEngineSkyを使用。
プロジェクトを新規作成するとはじめから入っているものです。

平行光源を連動させるとそれが太陽の位置となり、
平行光源を回転させるだけで空が動的に変化していきます。
太陽はシェーダーだけで描かれているのでパラメータで大きさなどカスタマイズできます。

カーブアセットというものがあり、float値や色のカーブが作れます。

ゲーム内時間に応じたライトの色や輝度のカーブをアーティストが調整して、
プログラマはそれをマテリアル等へ設定するだけ。という作業フローが簡単にできます。


●草

草生やす系の機能がサポートされているので、フォーリッジが使われています。

揺れはマテリアルに SimpleGrassWind というメソッドが用意されており、
影響度のマスクと簡単なパラメータにより簡単に揺らせます。



エフェクト

カスケードという標準搭載のパーティクルエディタで作ります。

まずエミッタ(発生器)を作って、そこへコマンドを追加していく形。
詳しい作り方は解説しませんが、シンプルなサンプルを見ながら
コマンドの内容を順次理解していくという手順になるかと思います。
もしこのゲームで見るなら、まずは
・Effect/PS_HitBlow (標準ヒット)
・Effect/PS_SmokeWalk (歩き煙)
辺りが良いかなと。


●1.ブループリントからの発生


座標、向きを与えて発生させます。キャラクターの攻撃ヒット処理とかでやってます。

●2.ペルソナ(アニメーション)からの発生


アニメーションの任意タイミングに発生通知を仕込みます。
モデルのボーンなどから発生させられます。
ここから発生させた場合、時間がキャラクターと連動する様になるので、
例えばこのゲームだとヒットストップなどの影響を受ける様になります。
自分の制作範囲ではこの仕様は基本助かりますが、困ることもあるかも。

通知を通ると一回発生する PlayParticleEffect と、
任意区間発生し続ける Timed Particle Effect があります。
Timed Particle Effect で Destroy Immediately を有効にすると
区間から外れた時にエフェクトが削除されるのでアニメーション側での尺制御が効きます。
(ただし関連エフェクトは全てパッと消える)

●3.シーンへの配置

今作ではやってませんが、シーンに直接配置するという方法もあります。
背景に発生し続けるエフェクトなどはそのまま配置するのが楽かと思います。

UI  [UI/HUDDefault], [UI/HUD3D]

●HUDクラス

HUDとは戦闘機の高度やマーカー等の表示ディスプレイから来ている言葉ですが、
ゲームではよくあるHPゲージ類などの表示物を指します。

UE4では標準でHUDにあたるクラスが搭載されており、
HUDクラスを継承したブループリントをワールド設定で指定しておくと自動的に起動されます。

このブループリントにはスクリーン系の描画イベントが届きます。

ここでは2D画面座標系での描画が可能です。
指定テクスチャを座標、UVを指定して直接描画することもできます。
またUE4はレンダラの関係で指定色や半透明を素材そのままに表示することは難しいのですが、
ここではそのまま出すことが出来ます。(ドットバイドットはできるのかちょっと分からないですが)


●3D HUD

標準HUDクラスは2D表示物しか扱えないため、
ゲージ類でも3D機能は使える様にしておきたくて自前のHUD機構を作ってあります。

Actorを継承した普通のブループリントで、コンポーネントから
ゲージ類のテクスチャを貼り付けたスタティックメッシュを追加しここでレイアウト調整。

このブループリントはカメラから生成されて、そのままカメラにくっつきます。
カメラの前にゲージが置いてあるという状態になります。
Player Controllerからカメラを取ってきて合わせるという方法でも良さそうですが。

普通に場にある物として配置しているため、
ライティングやポストフィルタの影響をそのまま受けてしまうのがネックです。


●演出系UI

3D HUDと同様にActorを継承したブループリントにコンポーネント追加で作ります。

他のブループリントから発生されて、
移動や拡縮アニメーション後に基本的に自殺するという性質を持ちます。

EventGraphに置いてあるタイムラインという機能で拡縮等のカーブアニメーションを行い、
終了したら自殺する。という作りになっています。

サウンド

●フォーマット

Wavをインポートすると、UEカスタマイズされたOgg形式に変換されます。
ファイル命名規則を合わせれば3ch以上のマルチチャンネルインポートもできます。


●SE

波形をインポートし、そのまま鳴らすものはそのままでも良い。
SoundCueを作るとパラメータを付加したりしながら再生できます。


●BGM

イントロループはイントロ部とループ部に波形を分けてアセット登録し、
SoundCueのConcatenatorで接続再生。

※接続部は基本的に途切れます。多分イントロ部のサンプル数のキリが良いと途切れにくいっぽい

●再生

エフェクトと同じくブループリントからの再生か、
ペルソナアニメーションからの再生か、シーンに配置するかといった感じです。

●音場

SoundAttenuation(サウンド減衰)というアセットをデフォルトで良いので作っておきます。
サウンド再生時の Attenuation Settings にアセットを指定しないと
パン振りは行われず真ん中から鳴ります。
指定することで位置に応じた出力処理(立体音響)がかかります。

●足場によって足音を変える

1.地形判定に材質ごとのタグを設定する

2.キャラクターから今の足場の材質を判定する

3.アニメーションから足音のリクエストをする

4.SoundCue内で分岐する