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

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

UE4 Sound CueのWave Playerノードについて

今回もSound Cueエディタ内で使用できる
ノードの解説を行っていきます。

タイトル通りWave Playerノードについてです。

Wave Playerノードは再生したいWaveファイルを設定することで、

Sound Cueがどの音を再生するのかを指定できるノードです。

f:id:MozPaca:20180420133107p:plain

 

Sound Cueを使用するにあたって、

最も使用頻度の高いノードだと思います。

 

検証にはUE4 4.19.1を使用します。

f:id:MozPaca:20180417160014p:plain

 

Sound Cueでこのノードを使用する場合は、

右側のWave PlayerからD&Dするか

f:id:MozPaca:20180420133839p:plain

 

コンテンツブラウザからWaveファイルをD&Dすることで、

出すことができます。

f:id:MozPaca:20180420134212p:plain

 

コンテンツブラウザからノードを出した場合は、

Sound WaveパラメータにD&Dした、
Waveファイルの情報が自動的に入るようになっています。

 

Wave Playerノードのパラメータは、

・Sound Wave

・Looping

の2種類があります。

f:id:MozPaca:20180420135031p:plain

 

Sound Waveパラメータは、

再生したいWaveファイルの情報を格納します。

f:id:MozPaca:20180420134657p:plain

 

Loopingパラメータは、

再生するWaveファイルが、ループ再生するかどうかの

設定です。チェックが入っている場合にループします。

デフォルトはオフです。

 

実際にノードを繋いだ例

f:id:MozPaca:20180420134528p:plain

 

最もシンプルな例ですが、

Sound Cueが持っている、Sound Classや

各種エフェクトの設定が行えるなど、

Waveファイルをそのまま再生するより

多彩な設定が可能となります。

UE4 Sound CueのRandomの使い方

UE4のSound Cueには
23種類のノードが存在します(2回目)

今回はRandomノードについて解説します。

f:id:MozPaca:20180417163245p:plain

 

検証にはUE4 4.19.1を使用します。

f:id:MozPaca:20180417160014p:plain

 

Randomノードとは

Random Node

Randomノードは、繋がっているSound Waveファイルノードを

ランダムに取得して再生するものです。

 

複数の音からランダムに再生したい場合に使用するノードです。

 

Mixerノードなどと同じく、

右クリックからインプットピンの追加が可能です。

f:id:MozPaca:20180418164735p:plain

 

Inputピンを追加した場合はこのようになります。

また追加できるピンに上限はありません。

f:id:MozPaca:20180418165143p:plain

ノード右側のインプットを追加の+マークをクリックしても、

インプットピンを追加することができます。

 

インプットピンを削除する場合は、

ピンを右クリックからインプットの削除で削除可能です。

f:id:MozPaca:20180418165329p:plain

 

Randomノードのパラメータには

・Weights

・Preselect at Level Load

・Redomize Without Replacement

の3つがあります。

 

Weightはそのサウンドが選ばれる確率を指定します。

各入力サウンドのためのウェイトリストです。

 

Preselect at Level Loadはレベルのロード時に選択され、

プレイセッション中に常に使用されるSound Waveノードです。

0以上の場合、各レベルが入力数をロードした直後に

ランダムに選択され、他は取り除かれます。

ランダム化した大規模Cueのメモリ使用量を削減できます。

 

Redomize Without Replacementは、代替あり

または代替なしでランダム化するかどうかの設定です。

tureの場合、入力サウンドが全部再生されるまで入力Sound Waveノードが、

再度再生されることはありません。

すべてのサウンドが確実に再生されるようになります。

f:id:MozPaca:20180418165837p:plain

 

実際にノードを繋いだ場合

この場合どちらかのSound Waveが再生されます。

f:id:MozPaca:20180418183223p:plain

 

 

 

UE4 Sound CueのMixerの使い方

UE4のSound Cueには
23種類のノードが存在します。

 

今回はその中のMixerノードについて解説します。

f:id:MozPaca:20180417155445p:plain

 

検証にはUE4 4.19.1を使用します。

f:id:MozPaca:20180417160014p:plain

 

Mixerノードとは

Mixer Node

Mixerノードは複数のSound Waveを同時に発生させることができるノードです。
イメージ的には音を混ぜて再生するという感じでしょうか。

ひとつのSound Cueから複数のSound Waveを再生したい場合に、
非常に有効なノードになります。

 

Mixerノードを右クリックからインプットピンを追加すると、

2つ以上のSound Waveを同時に発生することができます。

f:id:MozPaca:20180417160300p:plain

 

Inputピンを追加した場合はこのようになります。

また追加できるピンに上限はありません。

f:id:MozPaca:20180417160449p:plain

 

追加したピンを削除する場合は、

ピンを右クリックからインプットの削除で削除可能です。

f:id:MozPaca:20180417161853p:plain

 

Mixerノードを選択した際に表示される
Input Volumeパラメータはその名前の通り、

繋いだノードの音量を変更することができるパラメータです。

一番上に繋いだ音は小さい大きさで再生して、
真ん中に繋いだ音はそこそこの大きさで再生するといったことが可能です。
f:id:MozPaca:20180417161938p:plain

 

実際にノードを繋いだ場合

実際にノードを繋いだ場合このような形になります。

最もシンプルな形ですが、複数の音を再生し
それぞれの音量を調節するだけであれば、

これだけで実現可能です。

f:id:MozPaca:20180417162252p:plain

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とダメージが入っています。