UE4 Audio Component内のイベントについて見ていく
えー、先日Audio Component内にイベントがあるということを「初めて」知りました。
知らないものの中に便利なものって結構あるんだな。と思いました。
そこで今回はAudio Componentの中にあるイベントについて
まとめてみたいと思います。
使用したUE4のバージョンは4.16.2です。
(私の)準備
適当なブループリントを作成します。
コンテンツブラウザから右クリック→Blueprint Classを選択します。
親クラスはActorを選択してください。
適当な名前をつけて保存します。
イベントの出し方
作成したActorブループリントをダブルクリックで開きます。
左上のAdd ComponentからAudio Componentを追加します。
追加したAudio Componentを右クリックすると、
Add Eventから各イベントが出るので、必要なイベントを使ってください。
ここから本題
On Audio Finished (Audio)
オーディオ再生が完了した(最後まで演奏した)もしくは
Stop()などでオーディオを停止したときに走るイベントです。
爆発音を設定し、イベントが発生するとログが流れるように処理を書きます。
確認してみましょう。
再生が完全に終了したタイミングでログが流れると思います。
Physics Volume Changed (Audio)
Physics Volumeが変更されたときに走るイベントです。
New Volumeは変更後のPhysics Volumeの値を返します。
New Volume(Physics Volume Reference)
変更後のPhysics Volumeの値を返します。
On Audio Playback Percent (Audio)
サウンドが再生されている間走るイベントです。
Playing Sound Wave(Sound Wave Reference)
現在Audio Componentによって再生されているサウンドファイルを返します。
Playback Percent(Float)
サウンドの再生時間を返します。
再生時間をログで表示する処理にしてみました。
On Component Activated (Audio)
Audio Componentが起動したときに走るイベントです。
Component(Actor Component Reference)
Reset(Boolean)
On Component Deactivated (Audio)
Audio Componentが無効化されたときに走るイベントです。
Component(Actor Component Reference)
ゲーム開始から5秒後にAudio Componentを
Deactiveノードで無効化します。
それぞれの全てを確認したわけではありませんが、
かなり有用なものが多いです。
どうして今まで知らなかったんだろう...
UE4 マウスの感度調節機能を入れてみる
FPSなどのゲームでは、
自分に合わせてマウスやコントローラーの
感度を変更することが多いです。
今回はFPSテンプレートを使用して、
マウス感度の調節機能を作成したいと思います。
準備
今回はUE4 4.17.0 Preview 2を使用します。
First Person Templateを選択して、
プロジェクトを作成
しました。
FPSキャラクターの処理を追加する
まずはデフォルトのFirst Person Characterに処理を追加していきましょう。
Contents→First Person BP→Blueprintsから
First Person Characterをダブルクリックで開いてください。
このようになっていると思います。
変数を追加します。
マウス感度の値を格納するFloat型の変数を追加してください。
私はMouse Sensitivityという名前で作成しました。
作成したFloat型の変数のデフォルト値を1.0にします。
※0にするとカメラが一切動かなくなるからです。
次にデフォルト処理のMouse Inputの箇所を変更します。
先程作成した変数とAxis Valueを乗算し
Add Controller InputのValueに繋げます。
感度調整用のWidgetを作成する
キーボードなどで値を変更してもいいのですが、
味気ないのと記事が短くなってしまうので、
Widgetを作成していきます。
コンテンツブラウザから右クリック
User Interface→Widget Blueprintを選択します。
適当な名前をつけしょう。
作成したWidgetを開き、Designer画面で
オブジェクトをこのように配置します。
Text BlockとButtonで構成されたシンプルな配置です。
50と書かれているText Blockはバインドして値を切り替えます。
Background Blurは過去記事を参考にしてください。
50と書かれたText Blockにバインドを作成し、
現在のマウス感度を表示するための処理を書きます。
Event Graphのタブを開き、処理を書いていきます。
まずはWidgetが作成されたタイミングで
マウスカーソルの表示とゲームにポーズを掛けます。
次にDesigner画面で配置したボタンそれぞれに
感度を増加/減少の処理を書きます。
Clampで感度の上限/下限を設定しています。
Widgetを呼び出す
レベルブループリントを開き、このように処理を書きます。
特定のキーを押した際にWidgetの有無によって、
生成と削除を分けています。
はーい。完成。
確認してみる
処理が完成したら、実行して確認してみましょう。
FPSテンプレートのデフォルトの速度は1に相当します。
5ぐらいから制御不能なので、実際にゲームに組み込む際は
そこらの調整が必要そうです。
UE4 リバーブ効果を試してみる
UE4にはレベルにぽいって置くだけで、
簡単にリバーブ効果をかけることができます。
リバーブとは
reverbration(リバーブレーション)のことで、
よく残響と訳されます。
わかりやすいサイトがあったので、
こちらを参照してください。
今回はリバーブ効果を掛けるまでを記事にしたいと思います。
準備
プロジェクトは4.16.2を使用します。
4.17でも同じような感じだと思います(未検証)
プロジェクト作成後、作業に入っていきます。
それっぽい場所を作る
何もない場所でも処理を書けばしっかりと音が
跳ね返る(ように聞こえる)のですが、
やはり、まずは雰囲気からということで、
音が反響しそうな場所を作りました。
Audio Volumeを配置する
リバーブ効果を掛ける範囲を指定するために
Audio Volumeを配置しましょう。
Audio Volumeはモードタブで検索すると出てきます。
リバーブ効果を掛けたい範囲に、いい感じで配置してください。
Reverb Effectを作成する
Audio Volumeの配置ができたら
次にReverb Effectを作成します。
コンテンツブラウザから右クリック→Sounds→Reverb Effect
適当な名前をつけ、作成完了です。
作成したReverb Effectをダブルクリックで開くと、
このようにたくさんのパラメータが出てきます。
今回は変化を分かりやすくするため、
Gainの数値を上げています。
Gain...出力感度みたいなの。
Reverb EffectをAudio Volumeに適応する
先程レベルに配置したAudio Volumeを選択した状態で、
Detailsタブを見てください。
こんな感じになっていると思います。
このReverb Effectの欄に作成したReverb Effectを入れます。
入れました。
これで完成です。
Audio Volumeの範囲内で再生された音に
せっかくなので
というか普通の音では分かりにくいので、
足音を鳴らしてみたいと思います。
足音の再生に関しては前に記事を書いたので、
過去記事を参考にしてもらえると助かります。
やってみた
洞窟内?では足音が響いてる感じに聞こえると思います。
UE4 バーチャルパッドについての備忘録
1週間に記事を最低1つは書く...そんな風に思ってた時期もありました。
2週目にして既に心が折れ、ネタも無い...
というわけで備忘録ついでに記事にすることにしました。
今回はスマホ系の制作をしていると必ず見かける
バーチャルパッドについて書きたいと思います。
今回の記事を書くにあたって
UE4 4.16.1のプロジェクトを使用しています。
バーチャルパッドの設定はどこ?
作成するとデフォルトで描画されます。
このバーチャルパッドの設定をする場合には
左上のEditからProject Settingsを開きます。
EngineからInput→Mobileの
Default Touch Interfaceを編集します。
Engine Contentsを可視化していない場合、
タブを開いても何も見つからないので、
右下のView Optionsから
Show Engine Contentsにチェックを入れます。
映るようになりました。
この2つはそれぞれ、このような形になっています。
【Default Virtual Joysticks】
【Left Virtual Joystick Only】
バーチャルパッドを消したい場合
パッドの選択画面でClearをクリックすることで
パッドを消すことができます。
消えた。
その他
また、Touch Interfaceをカスタマイズすることにより
パッドの見た目を大きく変更することができます。
今回はデフォルトのパッドをカスタマイズして、
私のTwitterアイコンをパッドとして扱ってみました。
UE4 Dopplerノードを試してみた
UE4のSound Cueの中にDopplerというノードがあります。
今回はこのDopplerノードを使って見たいと思います。
ちなみに
ドップラー効果(ドップラーこうか、英語: doppler effect)
またはドップラーシフト(英語: doppler shift)とは、
波(音波や電磁波など)の発生源(音源・光源など)と
観測者との相対的な速度の存在によって、
波の周波数が異なって観測される減少をいう。
by wikipedia
救急車のピーポーピーポーとかが、
分かりやすい例だと思います。
準備
では、そのピーポーピーポーを作りましょう。
適当な作曲ソフトで「シーソーシーソー」と打ち込み、
救急車のサイレン音を.wavで書き出します。
書き出しました。
ちなみに作ったものはこんな感じ。
サイン波のシーソーシーソーです。
(モノラル音源です)
プロジェクトを作成する
UE4のプロジェクトを作成していきます。
バージョンは4.16.1を使用します。
テンプレートは使用せず、Blank Projectで
Starter Contentsは無しにして作成します。
作りました。
Sound Cueを作成する
先程作成した.wavファイルをUE4プロジェクト内にインポートします。
インポート完了後、wavファイルを
右クリックからキューを作成を選択します。
.wavファイルのSound Cueが作成されました。
減衰ファイルを作成する
次にサウンドを距離によって音の大きさを変更するために
Sound Attenuation(サウンド減衰)を作成します。
コンテンツブラウザを右クリックから、
Sound→Sound Attenuationを選択します。
作りました。
このファイルを開くと、減衰用のパラメータの変更が可能です。
今回は「ほぼ」デフォルトのままです。
Sound Cueを編集する
作成したSound Cueファイルを開きます。
まずはwaveノードを選択し、
左側のDetatilsタブのLoopingにチェックを入れます。
これでサウンド終了後に自動的に初めから再生されます。
次にOutputノードを選択し、
DetailsタブのAttenuation Settingに
先程作成した、減衰ファイルを入れます。
そしてWaveノードとOutputノードの間に
Dopplerノードをはさみます。
通り過ぎる物体を作成する
別に作成せずとも自分が動けばドップラー効果は
確認できますが、せっかく作ったので手順を書いておきます。
コンテンツブラウザから右クリック
Blueprint Classを選択します。
親クラスはActorクラスを使用します。
作りました。
ブループリントを編集する
作成したActorブループリントを開き、
コンポーネントを追加からAudioコンポーネントを追加します。
AudioコンポーネントのパラメータにSoundというものがあるので、
先程編集したSound Cueファイルを入れておきます。
次に視覚的にわかりやすくするために、
球体のStatic Meshコンポーネントを追加します。
最後にイベントグラフで
このように処理を書きます。
毎フレームY軸に-3ずつ移動します。
これでブループリントの編集は終了です。
レベルにブループリントを配置する
このようにActorブループリントをレベル上に配置します。
Audioコンポーネントに入れたSound Cueが
再生されながら自分に近づいてきて、遠下がっていくと思います。
確認してみる
実行して確認してみましょう。
(パラメータを色々変更しました)
私の調整が下手なせいかイマイチ
ドップラー効果が実感できませんが、
ノードひとつでエフェクトを掛けられるので
非常に面白いと思います。
UE4 マウスホイールを使用してゲーム中にカメラのズームイン/アウトを実装する
今更解説もいらないシリーズの続編です。
今回はゲーム中にマウスホイールをコロコロしたら
カメラが近寄ったり、遠のいたりする処理を実装します。
バージョンは4.16.1を使用します。
ではやっていきます。
準備
いつものごとくプロジェクトを作成しましょう。
テンプレートをThird Personを使用します。
作りました。
入力用の設定を行う
プロジェクト作成後、左上のEditから
Project Settingsを開きます。
Engine→InputからAction Mappingsに
ZoomIn : Mouse Wheel Up
ZoomOut : Mouse Wheel Down
を追加します。
処理を書く
Action Mappingsに追加ができたら、
次にコンテンツブラウザから
ThirdPersonBP→ThirdPersonCharacterを開きます。
このように処理を組みます。
入力イベントから一定の値をTarget Arm Lengthに渡しています。
またClamp(float)を使用することで、上限下限を設定しています。
これで処理は完了です。
確認する
デバッグ用にPrint Stringを処理のあとに追加しました。
今回は50という値を入れましたが、
もっと小さい数字を入れるとマウスホイールの
操作が活きてくると思います。
UE4 Modular Synthを触ってみる。
4.16のPreview1からちょっとずつ触っていたのですが、
ある程度理解できた(と思う)ので記事にまとめておきたいと思います。
マニアックな機能だとは思いますが、
かなり情報が少ないです。タスケテ...
誰か!日本語で!解説記事お願いします!
ではやっていきましょう。
準備
今回はUE4 4.16 Preview3を使用します。
適当なテンプレートからプロジェクトを作成しましょう。
私はThird Person Templateを使用しています。
プロジェクトが作成できたら、
左上のEdit→Pluginを開いてください。
Audioタブに「Synthesis」というプラグインがあるので、
これにチェックを入れ、エディタを再起動しましょう。
ブループリントを作成する
再起動が完了したら、コンテンツブラウザから
右クリック→Blueprint Classを選択します。
名前は適当にBP_SoundActorにしました。
ActorにComponentを追加する
BP_SoundActorをダブルクリックで開きます。
左上のAdd Componentから
「Modular Synth」を追加します。
階層は適当でいいと思います。
Blueprintに処理を書く
Componentを追加できたら、
このように処理を書きます。
CキーでNote Onを呼び出し、音を鳴らし始め
VキーでNote Offを呼び出し、音を鳴らすのを止めます。
Note Onは鍵盤などを「押した」という信号を送るものです。
Noteの中に入っているFloat型の数値は
Note Numberと言われるもので、それぞれに音を表しています。
上の画像のように60にすると4C、鍵盤の真ん中のドの音の
信号を送ります。
Velocityは音の大きさです。
数値が高ければ大きく、低ければ小さくなります。
Durationは音の再生時間です。
5にすると5秒間音を鳴らすという感じになります。
Note OffはNote Onと反対に音の信号を送るのを止めるものです。
Note Onを繋げてNote Numberを打ち込んでいけば
こんな感じに演奏もできます。
※音が小さいので、大きくして再生してください。
話を戻しまして、
Note On、Note Offにそれぞれパラメータを入れていきます。
・Note : 60
・Velocity : 120
・Duration : -1
これでCキーを押すとドの音が120の大きさで永続的(-1)に再生されます。
次にModular Synthのパラメータ変更処理を書いていきます。
Modular SynthにはたくさんのSet関数があり、
たくさんのパラメータがあります。
すべてModular SynthのSet関数です。
(まだ見落としがあるかも...)
これらすべての処理を書いていくのは大変なので、
今回はSet Synth Preset関数を使用します。
中に全てのパラメータが管理されており、
このノードを更新することで、パラメータを反映させることができます。
ではModular SynthからSet Synth Presetノードを出しましょう。
次にSynth Presetから線を引っ張り、
Promote to Variableで変数を作成します。
変数名は何でもいいです。
扱いやすくするために変数をPublicにしておきましょう。
この作成した処理をEvent Tickに繋げます。
これで処理は完成です。
実行してみる
Actorをレベルに配置し、実行してみましょう。
実行したら指定したキー(今回はCキー)を押してみましょう。
恐らく、なんとも言えない音がなると思います。
動画のようにPublicにした変数をいじることで、
一応動的にパラメータを変更することもできます。
触りとしてはこんな感じではないでしょうか?
手元にMIDIコントローラーがあれば色々試せそうですが、
私の手元には無いので、今回はここまで。
-- 追記 --
※キーボードイベントを使用する場合はPlayer Characterに設定するなどで、
イベントが取得できるようにしてください。