UE4 ポストプロセスのパラメータを動的に動作する
ポストプロセスはゲーム内の見た目を変更するのに
非常に有効な手段です。
今回はそのポストプロセスのパラメータを
ゲーム内で変更したいと思います。
バージョンは4.19を使用します。
準備
今回はコミュニティサンプルの
SunTempleプロジェクトを使用しています。
ポストプロセスマテリアルを作成する
コンテンツブラウザを右クリックから
マテリアルを選択してください。
適当な名前で保存します。
マテリアルパラメータコレクションを作成する
コンテンツブラウザを右クリックから
マテリアル・テクスチャ→マテリアルパラメータコレクションを選択します。
こちらも適当な名前で保存します。
マテリアルパラメータコレクションを編集する
一般的には汎用のパラメータなどを追加しますが、
今回は何も考えずに使用するパラメータを全て追加しました。
マテリアルを編集する
Sphere Maskを使用したポストプロセスマテリアルを作成します。
ポストプロセスを適応する
Sun TempleにはPostProcessVolumeがいくつか
配置されているので、Global PostProcessに先程作成した
ポストプロセスマテリアルを適応しましょう。
ブループリントを追加する
レベルブループリントを開きます。
Event BeginPlayからこのように処理を追加します。
タイムラインはこんな感じです。
Radiusのパラメータを除々に広げていくような処理です。
確認する
Dynamic Material Instanceの方がいいかも...
UE4 ブループリントでの音の鳴らし方について
UE4では様々な音の鳴らし方があります。
・レベル上に直接配置する(Ambient Sound Actorの使用など)
・ブループリントによる再生ノードの使用
・Audio Componentからの再生
・C++による再生関数の使用
など比較的多くの再生手段が用意されています。
その中でもUE4を触り始めたばかりの方を対象に、
使用がそこまで難しくないブループリントノードを使用して
音を再生する方法をいくつか紹介します。
準備
今回の検証にはUE4 4.18.3を使用しています。
Third Paron Templateからプロジェクトを作成します。
--追記
Starter Contentsを導入しているので、プロジェクト作成時に入れておく。
もしくは「機能またはコンテンツパックを追加」から
Starter Contentsを入れてください。
レベルブループリントを開きます。
右クリックから「Event BeginPlay」ノードを出します。
ゲーム開始時に走るイベントになります。
音を鳴らす
ここからが今回の本題になります。
単純に音を鳴らすためのノードは4つ用意されています。
ひとつずつ見ていきましょう。
Play Sound 2D
まずは「Play Sound 2D」です。
もっともシンプルで扱いやすいノードです。
何を再生するのかを指定するだけで音を鳴らすことができます。
ノードを展開するとこんな感じになります。
・Volume MultiPlier(音の大きさ)
・Pitch MultiPlier(ピッチの上下)
・Start Time(音をどこから再生するか(秒単位))
・使用するConcurrencyアセット
・所有するActor
問題がなければデフォルトのままでもいいと思います。
実際に鳴らしてみましょう。
Starter Contentsの「Fire01_Cue」を再生します。
初めの頃はこのノードを使うのをおすすめします。
Play Sound at Location
次は「Play Sound at Location」です。
3Dゲームや立体的な再生を行う際によく使用します。
Play Sound 2Dと同じく再生するものの指定を行う必要があります。
Locationは再生する座標を指定するものです。
ノードを展開するとこんな感じになります。
Rotation(音の向き)
Attenuation Setting(使用するAttnuationアセットの指定)
今回はAttenuationの設定を行っていないので
減衰などは起きません。
このままだとPlay Sound 2Dと同じになります。
Spawn Sound 2D
Play Soundノードより少し特殊ですが、
「Spawn Sound 2D」というノードがあります。
これはPlay Sound 2Dノードとほぼ同じ機能です。
唯一の違いはReturn Valueがある点です。
Return Valueからは再生したサウンドを含んだ、
Audio Componentが出力されています。
展開するとこんな感じ。
Spawn Sound at Location
Spawn Sound at Locationと同じ結果を出力し、
Spawn Sound 2Dと同じようにReturn Valueがあります。
展開するとこんな感じ。
大体Play Sound at Locationと同じような感覚で扱えると思います。
UE4 Media SoundがComponentになってあたふたした話
今回は2018年3月17日に行われる
「第5回UE4勉強会 in 大阪」で登壇する際に
多分話す時間無いだろうなぁと思う(ずっと話してそうな)
Media Soundについて先に書いていきます。
今回は知見を共有するための記事なので、
使い方を解説しているものではありません。
(公式、別の方もしくは未来の私に期待しましょう)
また、あたふたはしましたが今回の変更で個人的に
Media Frameworkは使いやすくなったんじゃないかなと思います。
本題に入ります。
Media Soundとは
Media SoundはMedia Frameworkの中にある、
サウンドを再生するためのものです。
4.17(Media Framework2.0)のときまでは
Media Player生成時に同時に生成できたのですが、
4.18(Media Framework3.0)からそうではなくなりました。
どこが変わったのか
4.17
Media TextureとMedia Soundを生成するためのチェックボックスがあります。
4.18
なくなりました。
コンテンツブラウザのMediaタブにもサウンドに
関係のなさそうなものばかりでした。
一体どこに行ってしまったんでしょうか?
コンポーネントになってました
ブループリントのコンポーネントの中にMedia Soundというものがありました。
Media PlayerやMedia Textureは今まで通りの使い方が可能でしたが、
Media Sound Componentは少し扱いや、パラメータなどが変わったようです。
4.17
Media Playerと同時に生成されたMedia Soundをレベルに設置すれば、
関連付けたMedia Playerからの再生に合わせて音を出力します。
再生部分がAudio Componentなので、
ブループリントからの制御や、ボリュームの変更などはスムーズでした。
4.18
こちらもMedia Sound Componentを持つActorをレベル上に配置すれば、
4.17と同様に音を再生します。
しかしコンポーネントになったMedia Soundは
パラメータが大きく変わっていました。
まずAttenuationやConcurrencyの設定は今まで通りです。
Attenuationのパラメータが少し豊富になった?
ボリュームの変更がなくなりました。
--追記 探してみましたがなさそうです。
MediaSoundComponent.h、cppを見てみましたが、
Volumeに関係ありそうなものは見つかりませんでした。
恐らく親クラスの関数にあるとは思うのですが、今回はここまで。
幸いSound Classが設定できるので、
Sound Classから音量を変更できますが
ちょっと試したいというときは少し不便に感じます。
Effect ChainやSubmixも使えるようです。
また再生チャンネルを1(mono)、2(stereo)、7.1(Surround)に
変更できるようになっていました。
--追記 なってませんでした。
ソースコードを見たところ、チャンネル1とチャンネル2は
サポートされているようですが、チャンネル7を選択した場合
自動的にチャンネル2になるようです。
C++覗いてみた
C++のMediaSoundComponent.hを見てみると
USynthComponentの継承クラスのようです。
なのでブループリント上で、USynthComponentの関数である
Startや、Stop、IsPlayingなどが使えると思います。
(動作は未検証)
またUSynthComponentを継承している別のコンポーネントに
Modular Synth Componentがあります。
もしかすると、これらのコンポーネントと似たような機能が存在するかもしれません。
(まだサラッとしか読んでない)
エディタ上に公開されているMedia Sound Componentオリジナルの変数は
・チャンネル数を指定する「Channels」
・Media Playerを関連付けるための「MediaPlayer」
くらいじゃないかなと思います。
関数などはC++のみで扱えるものはありましたが、
ブループリントから扱えるものはありませんでした。
Media Sound Component単体に思ったより機能ないなって印象を受けました。
(まぁMedia Frameworkの主役はSoundじゃないし...)
UE4 簡単な落下ダメージ処理を組む
落下ダメージには滞空時間で計算を行うものや、
落下距離で計算を行うものなど色々ありますが、
今回は落下速度で判定を行いたいと思います。
使用するバージョンはUE4 4.18.3です。
準備
まずはThird Person Shootingテンプレートからプロジェクトを作成しましょう。
落下ダメージがわかりやすいようにレベルを少し変更しています。
処理を組む
早速処理を組んでいきましょう。
Contents→ThirdPerson→ThirdPersonCharacterBPを開きます。
今回の処理の主役はGet Physics Linear Velocityノードです。
ターゲットの速度を取得するノードです。
これを着地時に呼び、そのReturn ValueのZ値を計算に使用します。
処理の全体図としてはこのような感じになります。
順番に見ていきましょう。
まずEvent Tickから処理が流れ、
Character Movementの持つIsFallingがTrueかFalseかを調べます。
Falseに処理が流れた場合、地面にいる状態ですので
IsFallingがFalseになった一番最初(つまり着地)のときだけ処理を続けます。
逆にTrueの場合は空中にいることになるのでDoOnceをリセットしておきます。
着地時の処理がGet Physics Linear Velocityに流れてきました。
このときのZの速度が-999より大きい場合は
無事着地したということでダメージ処理はありません。
-1000より小さかった場合は落下速度の半分の値をダメージとして処理します。
(このあたりの計算はうまくやってください。)
完成です。
ダメージを受け取る
確認用にこんな感じで組んでみました。
確認してみる
低いところからの落下ではダメージはありませんが、
高いところからの落下はきちんとダメージが入っていると思います。
※-592.239502とダメージが入っています。
UE4 Audio Listener周りの備忘録
Audio Listenerはゲーム内での耳にあたる部分です。
ゲーム内のどの位置に耳があり、どの方向を向いているのかなどを設定します。
FPSなどではあまり恩恵を感じませんが、
Top DownやThird Personなどでは音周りが大きく変わってきます。
UE4ではCameraの位置がデフォルトになっています。
今回はこのAudio Listener周りの処理について書いていきます。
使用しているバージョンはUE4 4.18.3です。
ブループリントエディタでAudio Listenerと検索すると、
このようなノードが出てきます。
1つずつ見ていきましょう。
Set Audio Listener Override
Audio Listenerの位置を変更するためのノードです。
詳しい使い方はこちら
ComponentにAttachする、
もしくはLocationとRotationを数値で指定することで
Audio Listenerの位置を更新することができます。
Player ControllerがTargetになるので、
Player Controllerのブループリント以外に書く場合は、
Get Player Controllerノードなどを接続してください。
Clear Audio Listener Override
Set Override Listener Overrideで変更された
Audio Listenerを初期化します。
Audio ListenerがAttachされている場合は、
nullptrで上書きされます。
このノードを使用してもAudio Listenerがなくなるわけではなく、
現在Playerが見ている座標、向きに再設定されます(デフォルト設定になる)
Set Override Listener Overrideと同じく、
Player ControllerがTargetです。
Are Any Listener Within Range
指定した範囲内にAudio Listenerが存在するかを判定するノードです。
円形の範囲を走査します。
引数のLocationには走査範囲の中心
Maximum RangeにはLocationからの半径を指定できます。
走査した範囲内にAudio Listenerがあれば、
Return ValueにTrue、
なければFalseが返ってきます。
Target はWorld Staticsです。
Set Global Listener Focus Parameters
Global Listenerの焦点パラメータの設定用ノードです。
(使ったことない)
Focus Azimuth Scale
音の焦点が合っている方位学を定義するスケーリング値です。
Non Focus Azimuth Scale
音の焦点が合っていない方位学を定義するスケーリング値です。
Focus Distance Scale
焦点が合っている音に対して使用する距離尺度です。
1より小さい場合は音までの距離が減少、
1より大きい場合は音までの距離が増加します。
Non Focus Distance Scale
焦点が合っていない音に対して使用する距離尺度です。
1より小さい場合は音までの距離が減少、
1より大きい場合は音までの距離が増加します。
Focus Volume Scale
焦点の合っている音の音量減衰値です。
Non Focus Volume Scale
焦点の合っていない音の音量減衰値です。
Focus Priority Scale
焦点の合っている音の優先度です。
1より大きい値は優先度が高くなり、
1より小さい値は優先度が低くなります。
Non Focus Priority Scale
焦点のあっていない音の優先度です。
1より大きい値は優先度が高くなり、
1より小さい値は優先度が低くなります。
TargetはWorld Staticsです。
余談
C++限定になりますが(ブループリントにはない)
現在のAudio Listenerの座標と向きを取得する
Get Audio Listener Positionという関数があります。
UE4 Sound Classを使ってみよう2
前回に引き続き、Sound Classについて書いていきます。
今回はSound Classを使用して、
Volumeの管理をやっていきたいと思います。
準備
今回もUE4 4.18.2を使用します。
プロジェクトを作成します。
デフォルトで音が入っているFirst Person Templateを選択し、
Starter Contentsを有りにしておきます。
作成しました。
Sound Classを作成する
コンテンツブラウザを右クリックから
Sounds→Sound Classを選択します。
効果音全体を管理するSound Classを作成します。
Sound Classの親子付けを行う
作成したSound Classを開き、子Sound Classを作成します。
銃弾の音を管理するSound Classを作成します。
このようになったと思います。
同じ要領で爆発音を管理するSound Classを作成します。
※自分なりの命名規則を無視してますが、気にしないでください。
Sound CueにSound Classを適応する
First Person→Audioフォルダにある
FirstPersonWeaponTemplateWeapnFire02から
Sound Cueを作成します。
こんな感じですね。
作成したSound Cueを開き、Sound Classの
SC_Bulletを設定します。
次にStarter ContentsのAudioフォルダにあるExplosion_Cueを開きます。
こちらにはSound ClassのExplosionを設定します。
パラメータを変更する
それではSound Classのパラメータを変更して、
音がどのように変化するのかを見ていきましょう。
※今回はVolumeのみ変更します。
Sound Mixで使用するパラメータもあるので機会があれば...
仮に親のVolumeパラメータを100にしたとしましょう。
こうすると、子Sound ClassのSC_BulletとExplosionを設定している
Sound CueのVolumeも100になります。
今度はSC_BulletのVolumeを0.5にしましょう。
子のパラメータを変更したので、SC_Bulletより上のパラメータには
変化がありません。Explosionの方は親のVolume100がまだ入っています。
子から更に子をつけることもできるので、上手く使ってください。
確認してみる
親のパラメータを変更すると、
子を設定しているSound Cueに全てパラメータが渡されているのが
分かると思います。
子のパラメータを変更しても他の子には影響はありません。
例えば、「SEのなっている間はBGMの音量を下げる」や、
「全てのSEの音量を上げたい」といった際に親のClassの
パラメータを変更するだけで処理を完了することが出来ます。
UE4 SoundClassを使ってみよう
今回はSound Classについて書いていきます。
各種パラメータについては省いていきます
(Radio Filterとか使ったことない)
Sound Classとは
Sound Classは多数のサウンドアセットに適応することのできる
プロパティの集合体です。
これらを上手く使うことでサウンドのパラメータ調整がかなり楽になります。
また、SoundClass同士で親子付けすることも可能であり、
かなり強力な機能です。すげー便利。
準備
今回のプロジェクトはUE4 4.18.2で作成しています。
SoundClassを作成する
コンテンツブラウザから右クリック
Sounds→Sound Classを選択します。
適当な名前を付けます。
SoundClassの中を見てみる
作成したSoundClassをダブルクリックで開くと、
このような画面が出てきます。
左側には各種パラメータ、右側にはSoundClassの親子関係が
ノードで表示されています。
Sound Classをアセットに適応する
まだパラメータも何も変更していませんが、
Sound Classをサウンドアセットに設定しましょう。
適当なwaveファイルからSound Cueを作成します。
作成したSound Cueを開き、Detailsタブの
Sound→Sound Classを設定します。
先ほど作成したSound Classに変更しておきましょう。
これでSound Cueの設定は終わりです。
Sound Classの親子付けをしてみる
Sound ClassのDetailsタブの下の方にChild Classesというものがあります。
右側の+をクリックし、子SoundClassを追加します。
SoundClassを作成していない場合や、
新規のSoundClassを追加したい場合は
Create New Asset欄のSound Classを選択して、
新しいSoundClassを作成しましょう。
子SoundClassを追加すると、右側のノードに子SoundClassが追加されます。
SoundClass_SE
|- SoundClass_Explosion
|- SoundClass_FootStep
| |- SoundClass_Grass
みたいな感じで親子付けするといいんじゃないでしょうか。