UE4 汎用的にサウンドを再生する
汎用的と言いましても、一人で開発する場合は(管理が楽になるかもしれませんが)
手間が増えるだけです。今回の処理はあくまでサウンド担当者が処理を書き、
別の担当者が処理を楽に呼び出すための方法です。
私が普段開発を行う際の書き方ですので、
もっといい方法があれば、教えてください。
では、やっていきます。
今回のUE4のバージョンは4.13.2です。
必要ファイルを作成していく
必要になるのは、
・Data Table
・列挙体
・構造体
・呼び出し用のFunction Library
・サウンドファイル
・サウンドキュー
・減衰設定ファイル
です。
Data TableやFunction Libraryについては過去記事を参考にしてください。
それぞれのパラメータを設定する
まずはData Tableで使用する構造体を作成します。
鳴らすだけなら必要なのはSound Cueの指定だけですが、
後の扱いやすさを考慮して
・Sound Cueファイルの指定
・BGMかSEかの判定(True...BGM, False...SE)
・サウンドの大きさ
をパラメータに作成します。
次にDataTableを設定をします。
先ほどの構造体で作成したパラメータに対応させたいものを入れていきます。
・攻撃の音であるSE_AttackはBGMではないためIs BGMはFalse、
サウンドの大きさは1。
・小爆発の音であるSE_SmallExplosionはIs BGMがFalse、
サウンドの大きさは0.8。
・物を振る音であるSE_SwingはIs BGMがFalse、
サウンドの大きさは1にします。
列挙体の設定をします。
ここで注意ですが、DataTableで設定した順番と同じようにしてください。
同じ順番でなかった場合、サウンドが再生されないもしくは、
違ったサウンドが再生されます。
最後にFunction Libraryを設定していきます。
関数名はPlay Sound For DataTableにしました。
引数として、鳴らしたいサウンドを指定する列挙体と
サウンドを鳴らす座標を指定するVectorの値を用意します。
Rertun値にはサウンドが鳴ったかどうかを文字で判定する
Bool型の値を用意します。
関数の全体図です。
順番に解説していきます。
まずはData Tableの列をすべて読み出し、引数で設定した列挙体と同じ番号が
あるかを判定します。同じ番号がなかった場合はサウンドを再生できないため、
RertunのIs Spawn SoundにFalseを入れて関数を終了させます。
同じ番号があった場合はその列の値を読み出します。
Is BGMの中身がTrueかFalseかを判定します。
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を入れて返します。
呼び出してみる
設定はすべて終わったので、サウンドを呼び出したいと思います。
レベルブループリントを開き、先ほど作成した関数を呼び出します。
関数の引数に鳴らしたいサウンドの列挙体と、サウンドを鳴らす座標を指定します。
(今回はマップに置いてある椅子からサウンドを鳴らすので椅子の座標を入れます)
サウンドが鳴ったかどうかを文字で確認するため、Print Stringを追加します。
確認してみる
上手くいっていれば、このようになると思います。
以上。私は普段こう書いてる話でした。
VRGameJamに参加してきました。
先日大阪で行われたVR Game inJapan 2016 Autumnに
参加してきました。
結果から言いますと楽しかったです。
普段しないような強引な処理を組んで別の発見があるなど
非常に充実した時間を過ごせました。
次回への課題としましては
他の参加者の方はハイスペックPCや、VRデバイスを
持ってきていただいているにも関わらず、私はほぼ手ぶらで参加してしまったのは
申し訳なく思っています。(ごめんなさい)
次はVRの動くPCとDK2を持っていくので勘弁してください。
今回は一部のサウンドの作成をしたほか、
関数ライブラリなどの汎用ブループリントを書かせていただきました。
音作ったり、プログラム組んだりしてます #VRGJOsaka pic.twitter.com/jCHATcUKod
— MozPaca (@MozPaca398) 2016年11月26日
今回、我々のチームはVRタワーディフェンスでゾンビを撃ちまくる
ゲームを作りました。
初日に使用する大まかな関数や、素材を用意しました。
こちらが初日の中間発表のスライドです。
2日目にほぼ完成までできたのですが、残念ながら
完成させることができませんでした。
こちらは2日目の最終発表時のスライドです。
プレイ動画は追記にて載せたいと思います。
(今手元にない...)
次回こそは完成させます。
UE4 DataTableで特定の数値を持ってくる
今回はDataTableを使用して、外部からの数値を持ってきたいと思います。
こちらのブログを参考にしました。
[UE4] CSVデータを扱う方法 DataTable編 | historia Inc - 株式会社ヒストリア
UE4のバージョンは4.14.0です。
続きを読むUE4 GameInstanceでグローバルに値を扱う
Game Instanceについて書きます。
今更解説もいらないシリーズ1です。
Game Instanceはレベルを跨いで値を保持するために使用するものです。
詳しい説明は
UE4 レベルを跨いで値を保持するGameInstanceについて - Let's Enjoy Unreal Engine
Game Instance, Custom Game Instance For Inter-Level Persistent Data Storage - Epic Wiki
に載っているのでそちらを参照してください。
ではやっていきます。
今回のUE4のバージョンは4.14.0です。
Game Instanceを作成する
プロジェクト作成後、Game Instanceのブループリントを作成します。
一番下にあるAll Classesに「Game Instance」と入力し、
Game Instanceを選択、Selectボタンを押します。
適当な名前を付けます。
Game Instanceを設定する
次に左上のEditからProject Settingsを開きます。
左側のProjectのMaps&Modesから
先ほど作成したGame Instanceを選択します。
これでGame Instanceを使用する準備ができました。
Game Instance内に処理を書いていく
作成したGame Instanceを開くと、このような感じだと思います。
グローバルに値を持ちたい変数や、
どこでも使いたい関数などを作成します。
今回は適当なBool型の変数と
Call Eventと文字を出力するCustom Eventを作成しました。
ではGame Instanceで作成した変数の値と関数を呼び出してみましょう。
レベルブループリントを開きます。
そしてこのように処理を組んでください。
Get Game Instanceは、先ほどProjectSettingsで設定した
Game InstanceがReturnされています。
その値でCastをし、扱いやすいように変数に格納しておきます。
その下にこんな処理を記述し、Pキーが押された際に
Game Instance内のGrobalFlagをTrueにし出力後、
Grobal Eventを呼び出します。
実行し、Pキーを押すと
GrobalFlagがTrueに変更後、出力。
GrobalEventによってCall Eventと出力されました。
Game Instance外のものをグローバルな変数に格納する
あらかじめ作成しておいたWidgetを戻り値に変数を
Game Instance内に作成します。
このままではまだ変数の中身は空なので、
Widgetブループリント内で自分自身をGame Instanceの変数に格納しましょう。
これでこのWidgetの値はGame Instanceを介すことで、
グローバルに扱えるようになりました。
今回はWidgetを使用しましたが、
何のコントローラーも持っていない、
おいてあるだけのObjectもグローバルに扱えると思います。
ただし、グローバルに扱えるということは
それなりのリスクがあるので注意して使用してください。
UE4 発光するゲージを作ってみる1
もう今更書くこともないようなことですが、
自分用のメモとして残しておくことにしました。
まぁもともとはぎんりゅーさんからの相談がきっかけですが。
(グラデーションのUIって綺麗だよねぇ)
今回はグラデーションで誤魔化してみよう編です。
またいろいろやってみます。
UE4のバージョンは4.13.2を使用しています。
続きを読む