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

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

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

UE4 汎用的にサウンドを再生する

Function Library UE4 Sound Data Table

汎用的と言いましても、一人で開発する場合は(管理が楽になるかもしれませんが)

手間が増えるだけです。今回の処理はあくまでサウンド担当者が処理を書き、

別の担当者が処理を楽に呼び出すための方法です。

 

私が普段開発を行う際の書き方ですので、

もっといい方法があれば、教えてください。

 

では、やっていきます。

今回のUE4のバージョンは4.13.2です。

 

必要ファイルを作成していく

必要になるのは、

・Data Table

・列挙体

・構造体

・呼び出し用のFunction Library

・サウンドファイル

・サウンドキュー

・減衰設定ファイル

f:id:MozPaca:20161130162708p:plain

f:id:MozPaca:20161130162921p:plain

です。

 

Data TableやFunction Libraryについては過去記事を参考にしてください。

mozpaca.hatenablog.com

 

それぞれのパラメータを設定する

 

まずはData Tableで使用する構造体を作成します。

鳴らすだけなら必要なのはSound Cueの指定だけですが、

後の扱いやすさを考慮して

・Sound Cueファイルの指定

・BGMかSEかの判定(True...BGM, False...SE)

・サウンドの大きさ

をパラメータに作成します。

f:id:MozPaca:20161130163341p:plain

 

次にDataTableを設定をします。

先ほどの構造体で作成したパラメータに対応させたいものを入れていきます。

・攻撃の音であるSE_AttackはBGMではないためIs BGMはFalse、

 サウンドの大きさは1。

・小爆発の音であるSE_SmallExplosionはIs BGMがFalse、

 サウンドの大きさは0.8。

・物を振る音であるSE_SwingはIs BGMがFalse、

 サウンドの大きさは1にします。

f:id:MozPaca:20161130162953p:plain

 

列挙体の設定をします。

ここで注意ですが、DataTableで設定した順番と同じようにしてください。

同じ順番でなかった場合、サウンドが再生されないもしくは、

違ったサウンドが再生されます。

f:id:MozPaca:20161130165720p:plain

 

最後にFunction Libraryを設定していきます。

関数名はPlay Sound For DataTableにしました。

引数として、鳴らしたいサウンドを指定する列挙体と

サウンドを鳴らす座標を指定するVectorの値を用意します。

Rertun値にはサウンドが鳴ったかどうかを文字で判定する

Bool型の値を用意します。

f:id:MozPaca:20161130170359p:plain

 

関数の全体図です。

f:id:MozPaca:20161130170922p:plain

 

順番に解説していきます。

まずはData Tableの列をすべて読み出し、引数で設定した列挙体と同じ番号が

あるかを判定します。同じ番号がなかった場合はサウンドを再生できないため、

RertunのIs Spawn SoundにFalseを入れて関数を終了させます。

f:id:MozPaca:20161130170946p:plain

 

同じ番号があった場合はその列の値を読み出します。

Is BGMの中身がTrueかFalseかを判定します。

f:id:MozPaca:20161130171329p:plain

 

Is BGMがTrueだった場合はSpawn Sound 2Dで再生し、

Is BGMがFalseだった場合はSpawn Sound At Locationで再生します。

再生する際に、Sound CueとSound Volumeを入れておきます。

Spawn Sound At Locationには減衰用のSound Attenuationを指定しておきます。

ReturnのIs Spawn SoundにTrueを入れて返します。

f:id:MozPaca:20161130171554p:plain

 

呼び出してみる

設定はすべて終わったので、サウンドを呼び出したいと思います。

レベルブループリントを開き、先ほど作成した関数を呼び出します。

関数の引数に鳴らしたいサウンドの列挙体と、サウンドを鳴らす座標を指定します。

(今回はマップに置いてある椅子からサウンドを鳴らすので椅子の座標を入れます)

サウンドが鳴ったかどうかを文字で確認するため、Print Stringを追加します。

f:id:MozPaca:20161130173256p:plain

 

確認してみる

上手くいっていれば、このようになると思います。

www.youtube.com

 

以上。私は普段こう書いてる話でした。