UE4 Sound Cueに自作のノードを追加する その1
最近流行っている...かどうかは知りませんが、
Sound Cueに自作のノードを作っていきたいと思います。
ソースを読みながらチマチマ調べたことなので、
「ここはこうした方がいい」というのがあれば教えてください。
準備
新しいプロジェクトを作成しましょう。
Visual Studio 2017を使用しています。
New ProjectからC++タブを選択します。
TemplateやStarter Contentsは特に必要ないので、
Basic Code、No Starter Contentsを選択しています。
プロジェクト名を適当に決め、プロジェクトを作成してください。
UE4エディタとVisual Studioがそれぞれ立ち上がると思います。
新規のC++ファイルを作成する
プロジェクトの作成が完了したら、
エディタ左上のFile→New C++ Class...をクリックします。
※コンテンツブラウザからでもC++ファイルを作成できます。
New C++ Class...を選択すると、このような画面が出ます。
BPでもあるようにここで親クラスを選択します。
ただ最初に表示されているクラスに目的の親クラスはないので、
Show All Classesにチェックを入れ、全てのクラスを表示させます。
今回使用する親クラスは「SoundNode」クラスです。
SoundNodeクラスを選択し、Nextのボタンをクリックします。
次に作成するC++ファイルの名前と格納場所を決定します。
今回はこんな感じにしました。
決定したらCreate Classをクリックしてください。
これでC++ファイルが作成されました。
作成したC++ファイルを見る
次はVisual Studio上での作業になります。
先程作成したC++ファイルが指定した場所にあるのを確認しましょう。
まずはSoundNodeTest.hを見ていきます。
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Sound/SoundNode.h"
#include "SoundNodeTest.generated.h"
/**
*
*/
UCLASS()
class ADDSOUNDNODE_API USoundNodeTest : public USoundNode
{
GENERATED_BODY()
};
※他のファイルにはGENERATED_UCLASS_BODY()と記述されてますが、
調べたところによるとレガシーらしいです。
次にSoundNodeTest.cppを見てみます。
// Fill out your copyright notice in the Description page of Project Settings.
#include "SoundNodeTest.h"
何もない!
実はもうノードは出来ている
まだ何もしていませんが、
実はもうSound Cueのノードとして生成されています。
ビルドをしてUE4エディタを立ち上げましょう。
コンテンツブラウザから右クリック
Sounds→Sound Cueを選択します。
適当な名前をつけましょう。
作成したSound CueのPaletteを見てみると、
作成したC++のファイル名がそのままノードになっています。
ノードして出してみるとこんな感じです。
中身は空なので繋いでも何も起きませんが、
次回からこのノードに機能をつけていきましょう。
次回
UE4 UnrealEngine4の導入手順
今回はUnreal Engine4の導入手順を紹介します。
ブラウザ(Microsoft Edge / Google Chromeなど)から
こちらのサイトにアクセスします。
Epic Gamesアカウントを作成する
アカウントを既に持っている方は、ログインをして
「Epic Games Launcherをインストールする」から進めてください。
画面右上のダウンロードボタンの左にある人のマークをクリックしてください。
画面下にある「サインアップ」をクリックします。
次に必要情報を記述していきます。
必要情報が入力できたら、
「私はサービス利用規約の内容を理解し同意します。」に
チェックをつけ、「アカウントの作成」ボタンをクリックします。
サインアップが完了したら、
登録したメールアドレスとパスワードを使用して、サインインをしましょう。
Epic Games Launcherをインストールする
既にEpic Gamesアカウントを持っている方はここから進めてください。
再びこちらのサイトにアクセスします。
ページ中央、もしくは右上のダウンロードボタンをクリックします。
しばらくするとEpic Installerがダウンロードされます。
しばらくしてもダウンロードが開始されない場合は
PCに合わせてWindows / Macのボタンをクリックして、
ダウンロードしてください。
ダウンロードしたEpic installerをダブルクリックで起動します。
「インストール」ボタンをクリックして、インストールします。
Unreal Engine4をインストールする
デスクトップに作成された「Epic Games Launcher」を
ダブルクリックで起動します。
先程登録したメールアドレスとパスワードを入力して、
サインインしましょう。
「ライブラリ」タブを選択し、「スロットの追加」をクリックします。
インストールしていないバージョンの一覧が表示されるので、
インストールしたいバージョンを選択します。
インストールするバージョンが選択できたら、
「インストール」ボタンをクリックします。
インストールする場所を選択し、
「インストール」ボタンをクリックすると、インストールが始まります。
インストール完了後、「起動」ボタンをクリックすると
Unreal Engien4が立ち上がります。
UE4 マテリアルの色をランダムに変更する
最近、マテリアルの記事書いてないなぁ。
ってことで今回はマテリアルとブループリントを使用して
マテリアルの色をランダムに変更する処理を作成したいと思います。
実は過去記事で今回の処理と同じ処理が写ってたりします。
準備
まずはプロジェクトを作成しましょう。
今回はUE4 4.17.0を使用しています。
作成しました。
マテリアルを作成する
プロジェクトを作成できたら、
コンテンツブラウザを右クリック→Materialを選択し、
新しいマテリアルを作成しましょう。
適当な名前をつけておきます。
作成したマテリアルをダブルクリックで開き、
このようにノードを繋げます。
Vector ParameterをBase Colorにつなぐシンプルなものです。
Vector ParameterのParameter Nameは何でも良いのですが、
今回は分かりやすくBaseColorとします。
これでマテリアルは完成です。
ブループリントを作成する
次にマテリアルを適応するMeshを持つ、
ブループリントを作成します。
コンテンツブラウザを右クリック→Blueprint Classを選択します。
今回のParent ClassはActorにしました。
こちらもマテリアル同様、適当な名前をつけます。
作成したブループリントをダブルクリックで開き、
Add ComponentからSphereを選択します。
こんな感じになると思います。
このSphereのマテリアルを先程作成した、
M_Randomに変更しましょう。
処理を書いていきます。
Construction Scriptタブを開き、このようにノードを繋げます。
SphereメッシュのElement Index 0のマテリアルを
Dynamic Material Instanceとして変数に格納します。
※マテリアルが複数ある場合はFor Loopと配列で
全てのマテリアルを格納することも可能です。
次にイベントグラフタブを開き、
このようにノードを繋げます。
変数に格納したマテリアルの色をランダムに変更しています。
Set Vector Parameter ValueのParameter Nameには
マテリアルを作成したときにつけたVector Parameterの名前を入力してください。
Random Floatノードは0~1の値をランダムに返してくれるノードです。
もしEmissive Colorで1以上の値が欲しい場合には
Random Float in Rangeノードを使用すると良いと思います。
配置する
作成したブループリントをレベルに配置しましょう。
確認してみる
このように生成された瞬間に
ランダムに作成された色が適応されていると思います。
余談
同様の処理を使い、Event Begin PlayをEvent Tickに
変更してみました。
UE4 4.17のリリースノートをAudioのところだけまとめてみた(仮)
Unreal Engine4 4.17.0がリリースされました。
リリースノートも既に公開されています。
リリースノートが膨大で、まだ全ては追いきれていませんが
このリリースノートに記載されている
Audio関連についてまとめました。
Removing audio streaming as an experimental feature in the engine.
Audio Streamingを実験的な機能から外れました。
4.16のときは
このように実験的な機能の欄に入っていたのですが、
4.17からなくなりました。
Audio mixer improvements for android.
Androidのオーディオミキサーが改良されたようです。
どう改良されたのかは未検証。
Updates and improvements to Steam Audio.
Steam Audioがアップデートしました。
(4.16のときはbeta 3でした)
どんな機能が入ったかを見ていきましょう。
Fixed packaging compilation errors.
パッケージング時のコンパイルエラーが修正されたようです。
Consolidated baking into a single window. Users can select multiple sources to bake at once.
ベイキングを1つのウィンドウに統合したようです。
複数のソースを選択して1度にベイクすることができます。
Added support for transmission.
Transmissionのサポートが追加されたようです。
何のことかわかってないので、情報をください。
Phonon Probe Volumes are set to NoCollide collision profile by default.
Phonon Probe VolumeはデフォルトでNoCollideの衝突プロファイルに設定されているようです。
Phonon Probe Volumes may be arbitrarily rotated, scaled, and translated.
Phonon Prode Volumeは任意に回転、拡大縮小、変換ができるようです。
Added Phonon Scene actor for scene export - this removes need for external .phononscene file and simplifies packaging.
SceneをエクスポートするためにPhonon Scene Actorが追加されたようです。
これにより外部のPhononSceneファイルが必要なくなり、
パッケージングが簡単になりました。
Added support for multichannel
マルチチャンネルのサポートが追加されたようです。
5.1チャンネルに対応したのだと思っていますが、未検証です。
Fixed buffer size related crashes. Added support for Win32.
バッファサイズに関連するクラッシュの改善と
Win32のサポートが追加されたようです。
Adding ability to modify Low Pass Filter frequency with audio components.
Audio Componentにローパスフィルタを変更する機能が追加されました。
4.16のときにもローパスフィルタ関連のノードはありましたが、
4.17からは上記のノードに加え、これらのノードが追加されました。
Deleting unused velocity variable in OpenAL implementation.
OpenALでの実装の際に未使用のVelocity変数は削除されるようです。
Added SoundClassObject to the asset registry searchable data for sound assets, to make it easier to track down volume/muting bugs when assets have the wrong sound class set (Note: Assets will need to be resaved before this data will show up for unloaded assets (loaded assets should work immediately))
サウンドアセットのデータにSound Class Objectが追加されたようです。
間違ったSound Classを設定している場合、ボリューム / ミュートのバグが
追跡しやすくなったようです。
No longer forcing pending decodes to ensure completed on shutdown in audio mixer.
未検証。
Changed to using tasks from task manager vs using Async.h futures in audio mixer decodes.
未検証。
Added new, combined macOS/iOS/tvOS back-end for new audio engine.
未検証。
Hiding streaming options (and import options while i'm at it) from media sound waves.
未検証。
Fix for streaming sound wave in audio mixer during shutdown.
未検証。
Fixed packaging a project for Windows with the Steam Audio plugin enabled (Contributed by projectgheist via Github pull request)
Steam Audioプラグインが有効になっているWindows用プロジェクトが修正されたようです。
Fixed crash that could occur while shutting down a streaming SoundSource
Streaming Sound Sourceのシャットダウン中に発生する可能性のある
クラッシュが修正されたようです。
Fix for a number of threading issue in audio streaming manager.
未検証。
Fix crash when duplicating a sound wave asset in content browser due to thumbnail rendering.
Sound Waveアセットを複製するときに
クラッシュする問題が修正されたようです。
Fixed crash that occured when trying to launch the engine with the new Unreal Audio engine while the current audio playback device is disabled on Windows.
未検証。
Fix for a crash in parallel source processing in audio mixer.
Audio Mixerの並列ソース処理がクラッシュする問題を修正されたようです。
Several optimizations to source manager in audio mixer.
Audio MixerのSource Managerへの最適化が行われたようです。
No longer loading XAudio2 module in server builds.
サーバービルドをする際にXAudio2モジュールを読み込まなくなりました。
Properly deleting AudioClockVoice in XAudio2 backend.
未検証。よくわからない。
Crash fix for audio on android.
Androidでのオーディオがクラッシュする問題を修正されました。。
Fix for crash when an audio streaming sound wave doesn't have serialized stream chunks.
Audio Streaming Sound WaveにStreamチャンクがない場合に
クラッシュする問題を修正したようです。
Crash fix for when a map attempts to cook a streaming sound file while targeting Linux.
Linuxをターゲットにしてストリーミングサウンドファイルを
作成したときにクラッシュしないように修正されました。
Added subtitle priority to USoundCues. It defaults to the default subtitle priority (10000) so no behavior changes by default, but you can now specify SoundCue priorities properly for the subtitle system.
これはUIの箇所に書いてあったものですが、
USoundCuesのサブタイトルに優先順位を指定できるようにしたようです。
デフォルトでは100000.0に設定してあるため挙動に変化はありませんが、
サブタイトルシステムに対して適切に優先順位を指定できるようになりました。
まだまだ未検証箇所が多く不明瞭なところが目立ちますが、
検証したものから追記していこうと思ってます。
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の範囲内で再生された音に
せっかくなので
というか普通の音では分かりにくいので、
足音を鳴らしてみたいと思います。
足音の再生に関しては前に記事を書いたので、
過去記事を参考にしてもらえると助かります。
やってみた
洞窟内?では足音が響いてる感じに聞こえると思います。