UE4初心者が頑張ってるブログ

Unreal Engine4を使用した開発メモ、及びそれに関連することについて不定期に書いています。

UE4 ポストプロセスのパラメータを動的に動作する

ポストプロセスはゲーム内の見た目を変更するのに
非常に有効な手段です。

 

今回はそのポストプロセスのパラメータを
ゲーム内で変更したいと思います。

 

バージョンは4.19を使用します。

f:id:MozPaca:20180410112448p:plain

 

準備

今回はコミュニティサンプルの
SunTempleプロジェクトを使用しています。

f:id:MozPaca:20180410112643p:plain

 

f:id:MozPaca:20180410112820p:plain

 

ポストプロセスマテリアルを作成する

コンテンツブラウザを右クリックから

マテリアルを選択してください。

f:id:MozPaca:20180410112946p:plain

 

適当な名前で保存します。

f:id:MozPaca:20180410113056p:plain

 

マテリアルパラメータコレクションを作成する

コンテンツブラウザを右クリックから

マテリアル・テクスチャ→マテリアルパラメータコレクションを選択します。

f:id:MozPaca:20180410113230p:plain

 

こちらも適当な名前で保存します。

f:id:MozPaca:20180410113353p:plain

 

マテリアルパラメータコレクションを編集する

一般的には汎用のパラメータなどを追加しますが、

今回は何も考えずに使用するパラメータを全て追加しました。

f:id:MozPaca:20180410113459p:plain

 

 

マテリアルを編集する

Sphere Maskを使用したポストプロセスマテリアルを作成します。

f:id:MozPaca:20180410113530p:plain

 

ポストプロセスを適応する

Sun TempleにはPostProcessVolumeがいくつか

配置されているので、Global PostProcessに先程作成した

ポストプロセスマテリアルを適応しましょう。

f:id:MozPaca:20180410113830p:plain

 

ブループリントを追加する

レベルブループリントを開きます。

f:id:MozPaca:20180410114921p:plain

 

Event BeginPlayからこのように処理を追加します。

f:id:MozPaca:20180410114025p:plain

 

タイムラインはこんな感じです。

f:id:MozPaca:20180410114057p:plain

 

Radiusのパラメータを除々に広げていくような処理です。

 

確認する

www.youtube.com

 

Dynamic Material Instanceの方がいいかも...

UE4 ブループリントでの音の鳴らし方について

UE4では様々な音の鳴らし方があります。

・レベル上に直接配置する(Ambient Sound Actorの使用など)

・ブループリントによる再生ノードの使用

・Audio Componentからの再生

C++による再生関数の使用

など比較的多くの再生手段が用意されています。

 

その中でもUE4を触り始めたばかりの方を対象に、

使用がそこまで難しくないブループリントノードを使用して

音を再生する方法をいくつか紹介します。

 

準備

今回の検証にはUE4 4.18.3を使用しています。

f:id:MozPaca:20180225073924j:plain

 

Third Paron Templateからプロジェクトを作成します。

f:id:MozPaca:20180313183856p:plain

 

--追記

 Starter Contentsを導入しているので、プロジェクト作成時に入れておく。

 もしくは「機能またはコンテンツパックを追加」から

 Starter Contentsを入れてください。

 

レベルブループリントを開きます。

f:id:MozPaca:20180313184832p:plain

 

右クリックから「Event BeginPlay」ノードを出します。

f:id:MozPaca:20180313185154p:plain

ゲーム開始時に走るイベントになります。

 

音を鳴らす

ここからが今回の本題になります。

単純に音を鳴らすためのノードは4つ用意されています。

ひとつずつ見ていきましょう。

 

Play Sound 2D

まずは「Play Sound 2D」です。

もっともシンプルで扱いやすいノードです。

何を再生するのかを指定するだけで音を鳴らすことができます。

f:id:MozPaca:20180313185447p:plain

 

ノードを展開するとこんな感じになります。

・Volume MultiPlier(音の大きさ)

・Pitch MultiPlier(ピッチの上下)

・Start Time(音をどこから再生するか(秒単位))

・使用するConcurrencyアセット

・所有するActor

f:id:MozPaca:20180313185733p:plain

問題がなければデフォルトのままでもいいと思います。

 

実際に鳴らしてみましょう。

Starter Contentsの「Fire01_Cue」を再生します。

f:id:MozPaca:20180313190202p:plain

 

www.youtube.com

 

初めの頃はこのノードを使うのをおすすめします。

 

Play Sound at Location

次は「Play Sound at Location」です。

3Dゲームや立体的な再生を行う際によく使用します。

Play Sound 2Dと同じく再生するものの指定を行う必要があります。

Locationは再生する座標を指定するものです。

f:id:MozPaca:20180313185455p:plain

 

ノードを展開するとこんな感じになります。

Rotation(音の向き)

Attenuation Setting(使用するAttnuationアセットの指定)

f:id:MozPaca:20180313192505p:plain

 

今回はAttenuationの設定を行っていないので

減衰などは起きません。

このままだとPlay Sound 2Dと同じになります。

Spawn Sound 2D

Play Soundノードより少し特殊ですが、

「Spawn Sound 2D」というノードがあります。

これはPlay Sound 2Dノードとほぼ同じ機能です。

唯一の違いはReturn Valueがある点です。

Return Valueからは再生したサウンドを含んだ、

Audio Componentが出力されています。

f:id:MozPaca:20180313185503p:plain

 

展開するとこんな感じ。

f:id:MozPaca:20180313192522p:plain

 

Spawn Sound at Location

Spawn Sound at Locationと同じ結果を出力し、

Spawn Sound 2Dと同じようにReturn Valueがあります。

f:id:MozPaca:20180313185511p:plain

 

展開するとこんな感じ。

大体Play Sound at Locationと同じような感覚で扱えると思います。

f:id:MozPaca:20180313192626p:plain

UE4 Media SoundがComponentになってあたふたした話

今回は2018年3月17日に行われる
「第5回UE4勉強会 in 大阪」で登壇する際に
多分話す時間無いだろうなぁと思う(ずっと話してそうな)
Media Soundについて先に書いていきます。

ue4study-osaka.connpass.com

 

今回は知見を共有するための記事なので、

使い方を解説しているものではありません。

(公式、別の方もしくは未来の私に期待しましょう)

 

また、あたふたはしましたが今回の変更で個人的に

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を生成するためのチェックボックスがあります。

f:id:MozPaca:20180312162645p:plain

 

4.18

なくなりました。

f:id:MozPaca:20180312162638p:plain

 

コンテンツブラウザのMediaタブにもサウンドに

関係のなさそうなものばかりでした。

f:id:MozPaca:20180312163410p:plain

 

一体どこに行ってしまったんでしょうか?

 

コンポーネントになってました

ブループリントのコンポーネントの中にMedia Soundというものがありました。

f:id:MozPaca:20180312162910p:plain

 

Media PlayerやMedia Textureは今まで通りの使い方が可能でしたが、

Media Sound Componentは少し扱いや、パラメータなどが変わったようです。

 

4.17

Media Playerと同時に生成されたMedia Soundをレベルに設置すれば、

関連付けたMedia Playerからの再生に合わせて音を出力します。

f:id:MozPaca:20180312163739p:plain

 

再生部分がAudio Componentなので、

ブループリントからの制御や、ボリュームの変更などはスムーズでした。

f:id:MozPaca:20180312164442p:plain

 

4.18

こちらもMedia Sound Componentを持つActorをレベル上に配置すれば、

4.17と同様に音を再生します。

 

しかしコンポーネントになったMedia Soundは

パラメータが大きく変わっていました。

f:id:MozPaca:20180312164629p:plain

まず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になるようです。

f:id:MozPaca:20180312172027j:plain

 

C++覗いてみた

C++のMediaSoundComponent.hを見てみると

USynthComponentの継承クラスのようです。

なのでブループリント上で、USynthComponentの関数である

Startや、Stop、IsPlayingなどが使えると思います。

(動作は未検証)

 

またUSynthComponentを継承している別のコンポーネント

Modular Synth Componentがあります。

もしかすると、これらのコンポーネントと似たような機能が存在するかもしれません。

(まだサラッとしか読んでない)

 

エディタ上に公開されているMedia Sound Componentオリジナルの変数は

・チャンネル数を指定する「Channels」

f:id:MozPaca:20180312173134p:plain

 

・Media Playerを関連付けるための「MediaPlayer」

f:id:MozPaca:20180312173433p:plain

くらいじゃないかなと思います。

 

関数などはC++のみで扱えるものはありましたが、

ブループリントから扱えるものはありませんでした。

 

Media Sound Component単体に思ったより機能ないなって印象を受けました。

(まぁMedia Frameworkの主役はSoundじゃないし...)

UE4 簡単な落下ダメージ処理を組む

落下ダメージには滞空時間で計算を行うものや、

落下距離で計算を行うものなど色々ありますが、

今回は落下速度で判定を行いたいと思います。

使用するバージョンはUE4 4.18.3です。

f:id:MozPaca:20180302110812p:plain

 

準備

まずはThird Person Shootingテンプレートからプロジェクトを作成しましょう。

f:id:MozPaca:20180302111019p:plain

 

落下ダメージがわかりやすいようにレベルを少し変更しています。

f:id:MozPaca:20180302111231p:plain

 

処理を組む

早速処理を組んでいきましょう。

Contents→ThirdPerson→ThirdPersonCharacterBPを開きます。

f:id:MozPaca:20180302112012p:plain

 

今回の処理の主役はGet Physics Linear Velocityノードです。

 

f:id:MozPaca:20180302111503p:plain

 

docs.unrealengine.com

 

ターゲットの速度を取得するノードです。

これを着地時に呼び、そのReturn ValueのZ値を計算に使用します。

 

処理の全体図としてはこのような感じになります。

f:id:MozPaca:20180302113312p:plain

 

順番に見ていきましょう。

まずEvent Tickから処理が流れ、

Character Movementの持つIsFallingがTrueかFalseかを調べます。

 

Falseに処理が流れた場合、地面にいる状態ですので

IsFallingがFalseになった一番最初(つまり着地)のときだけ処理を続けます。

 

逆にTrueの場合は空中にいることになるのでDoOnceをリセットしておきます。

f:id:MozPaca:20180302112240p:plain

 

着地時の処理がGet Physics Linear Velocityに流れてきました。

 

このときのZの速度が-999より大きい場合は

無事着地したということでダメージ処理はありません。

 

-1000より小さかった場合は落下速度の半分の値をダメージとして処理します。

(このあたりの計算はうまくやってください。)

f:id:MozPaca:20180302113301p:plain

 

完成です。

 

ダメージを受け取る

確認用にこんな感じで組んでみました。

f:id:MozPaca:20180302113533p:plain

 

確認してみる

低いところからの落下ではダメージはありませんが、

高いところからの落下はきちんとダメージが入っていると思います。

www.youtube.com

※-592.239502とダメージが入っています。

 

UE4 Audio Listener周りの備忘録

Audio Listenerはゲーム内での耳にあたる部分です。
ゲーム内のどの位置に耳があり、どの方向を向いているのかなどを設定します。

FPSなどではあまり恩恵を感じませんが、
Top DownやThird Personなどでは音周りが大きく変わってきます。 

 

UE4ではCameraの位置がデフォルトになっています。

 

今回はこのAudio Listener周りの処理について書いていきます。

 

使用しているバージョンはUE4 4.18.3です。

f:id:MozPaca:20180225073924j:plain

 

ブループリントエディタでAudio Listenerと検索すると、

このようなノードが出てきます。

f:id:MozPaca:20180225074119j:plain

 

1つずつ見ていきましょう。

 

 

Set Audio Listener Override

f:id:MozPaca:20180225083356j:plain

Audio Listenerの位置を変更するためのノードです。

 

詳しい使い方はこちら

株式会社プラスシグナル

 

ComponentにAttachする、

もしくはLocationとRotationを数値で指定することで

Audio Listenerの位置を更新することができます。

 

Player ControllerがTargetになるので、

Player Controllerのブループリント以外に書く場合は、

Get Player Controllerノードなどを接続してください。

 

Clear Audio Listener Override

f:id:MozPaca:20180225083745j:plain

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

f:id:MozPaca:20180225084718j:plain

指定した範囲内にAudio Listenerが存在するかを判定するノードです。

 

円形の範囲を走査します。

引数のLocationには走査範囲の中心

Maximum RangeにはLocationからの半径を指定できます。

 

走査した範囲内にAudio Listenerがあれば、

Return ValueにTrue、

なければFalseが返ってきます。

 

Target はWorld Staticsです。

 

Set Global Listener Focus Parameters

f:id:MozPaca:20180225085129j:plain

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を使用します。

f:id:MozPaca:20180102111644j:plain

 

プロジェクトを作成します。

デフォルトで音が入っているFirst Person Templateを選択し、

Starter Contentsを有りにしておきます。

f:id:MozPaca:20180102112043j:plain

 

作成しました。

f:id:MozPaca:20180102112144j:plain

 

Sound Classを作成する

コンテンツブラウザを右クリックから

Sounds→Sound Classを選択します。

f:id:MozPaca:20180102112225j:plain

 

効果音全体を管理するSound Classを作成します。

f:id:MozPaca:20180102112306j:plain

 

Sound Classの親子付けを行う

作成したSound Classを開き、子Sound Classを作成します。

f:id:MozPaca:20180102112344j:plain

 

銃弾の音を管理するSound Classを作成します。

f:id:MozPaca:20180102112450j:plain

 

このようになったと思います。

f:id:MozPaca:20180102112533j:plain

 

同じ要領で爆発音を管理するSound Classを作成します。

※自分なりの命名規則を無視してますが、気にしないでください。

f:id:MozPaca:20180102112606j:plain

 

Sound CueにSound Classを適応する

First Person→Audioフォルダにある

FirstPersonWeaponTemplateWeapnFire02から

Sound Cueを作成します。

f:id:MozPaca:20180102112845j:plain

 

こんな感じですね。

f:id:MozPaca:20180102113034j:plain

 

作成したSound Cueを開き、Sound Classの

SC_Bulletを設定します。

f:id:MozPaca:20180102113252j:plain

 

次にStarter ContentsのAudioフォルダにあるExplosion_Cueを開きます。

f:id:MozPaca:20180102113345j:plain

 

こちらにはSound ClassのExplosionを設定します。

f:id:MozPaca:20180102113502j:plain

 

パラメータを変更する

それではSound Classのパラメータを変更して、

音がどのように変化するのかを見ていきましょう。

※今回はVolumeのみ変更します。

 Sound Mixで使用するパラメータもあるので機会があれば...

 

仮に親のVolumeパラメータを100にしたとしましょう。

こうすると、子Sound ClassのSC_BulletとExplosionを設定している

Sound CueのVolumeも100になります。

f:id:MozPaca:20180102115013j:plain

 

今度はSC_BulletのVolumeを0.5にしましょう。

子のパラメータを変更したので、SC_Bulletより上のパラメータには

変化がありません。Explosionの方は親のVolume100がまだ入っています。

f:id:MozPaca:20180102115238j:plain

 

子から更に子をつけることもできるので、上手く使ってください。

 

確認してみる

親のパラメータを変更すると、

子を設定しているSound Cueに全てパラメータが渡されているのが

分かると思います。

 

www.youtube.com

子のパラメータを変更しても他の子には影響はありません。

 

例えば、「SEのなっている間はBGMの音量を下げる」や、

「全てのSEの音量を上げたい」といった際に親のClassの

パラメータを変更するだけで処理を完了することが出来ます。

UE4 SoundClassを使ってみよう

 今回はSound Classについて書いていきます。

各種パラメータについては省いていきます

(Radio Filterとか使ったことない)

f:id:MozPaca:20180102094431j:plain

 

Sound Classとは

Sound Classは多数のサウンドアセットに適応することのできる

プロパティの集合体です。

これらを上手く使うことでサウンドのパラメータ調整がかなり楽になります。

 

また、SoundClass同士で親子付けすることも可能であり、

かなり強力な機能です。すげー便利。

 

 

準備

今回のプロジェクトはUE4 4.18.2で作成しています。

f:id:MozPaca:20180102094956j:plain

 

 

SoundClassを作成する

コンテンツブラウザから右クリック

Sounds→Sound Classを選択します。

f:id:MozPaca:20180102095337j:plain

 

適当な名前を付けます。

f:id:MozPaca:20180102095439j:plain

 

SoundClassの中を見てみる

作成したSoundClassをダブルクリックで開くと、

このような画面が出てきます。

f:id:MozPaca:20180102095633j:plain

 

左側には各種パラメータ、右側にはSoundClassの親子関係が

ノードで表示されています。

 

Sound Classをアセットに適応する

まだパラメータも何も変更していませんが、

Sound Classをサウンドアセットに設定しましょう。

 

適当なwaveファイルからSound Cueを作成します。

f:id:MozPaca:20180102101146j:plain

 

作成したSound Cueを開き、Detailsタブの

Sound→Sound Classを設定します。

f:id:MozPaca:20180102101539j:plain

 

先ほど作成したSound Classに変更しておきましょう。

f:id:MozPaca:20180102101723j:plain

 

これでSound Cueの設定は終わりです。

 

Sound Classの親子付けをしてみる

Sound ClassのDetailsタブの下の方にChild Classesというものがあります。

右側の+をクリックし、子SoundClassを追加します。

f:id:MozPaca:20180102095927j:plain

 

SoundClassを作成していない場合や、

新規のSoundClassを追加したい場合は

Create New Asset欄のSound Classを選択して、

新しいSoundClassを作成しましょう。

f:id:MozPaca:20180102100118j:plain

 

子SoundClassを追加すると、右側のノードに子SoundClassが追加されます。

f:id:MozPaca:20180102100335j:plain

 

SoundClass_SE

 |- SoundClass_Explosion

 |- SoundClass_FootStep

 | |- SoundClass_Grass 

みたいな感じで親子付けするといいんじゃないでしょうか。