Quartz は、ブループリントによって公開されるスケジュール システムであり、ゲーム、オーディオ ロジック、オーディオ レンダリング スレッドの間のタイミングの問題を解決し、サンプル アキュレートなオーディオの再生を実現します。
このガイドでは、Quartz を搭載したメトロノームを作成し、オーディオおよびゲームプレイ イベントをトリガーする方法について説明します。
前提条件
サードパーソン テンプレート による新規プロジェクトを作成します。
1 - MetaSound を作成する
メトロノームのビープ音として 2 つの MetaSound ソース を作成します。以下の手順を実行して、上記グラフを作成します。
1.1 - 高周波のビープ音を作成する
-
MetaSound ソースを作成します。
-
コンテンツ ブラウザ で [Add (追加)] ボタンをクリックします。
-
[Audio (オーディオ)] > [MetaSound Source (MetaSound ソース)] を選択します。
-
新しい MetaSound に「
MSS_BeepA4」と名前を付けます。
-
-
MetaSound をダブルクリックして、MetaSound エディタ を開きます。
-
On Play Input ノードを見つけて、ピンを空白の領域にドラッグします。ノードの検索に「AD Envelope (Audio)」と入力し、接続されたノードを作成します。ノードをドラッグすると、グラフ内でノードを移動できます。
-
AD Envelope (Audio) ノードで、以下の操作を行います。
-
Decay Time を「0.1」に設定します。
-
On Done ピンを On Finished Output ノードに接続します。
-
Out Envelope ピンからドラッグして、Multiply (Audio) ノードを作成します。
-
-
Multiply (Audio) ノードで、次の手順を実行します。
-
Bottom Multiplicand ピンをドラッグし、Sine ノードを作成します。
-
出力ピンを、Out Mono 出力 ノードに接続します。
-
-
MetaSound エディタのツールバー の [Play (再生)] ボタンをクリックし、短い高周波のビープ音を再生します。
-
MetaSound を保存し、MetaSound エディタ を閉じます。
1.2 - 低周波のビープ音を作成する
-
コンテンツ ブラウザ で
MSS_BeepA4MetaSound を右クリックして [Duplicate (複製)] を選択します。 -
新しい MetaSound に「
MSS_BeepA3」と名前を付けます。 -
MetaSound をダブルクリックして、MetaSound エディタ を開きます。
-
Sine ノードで Frequency を「220」に設定します。
-
MetaSound エディタのツールバー の [Play] ボタンをクリックし、短い低周波のビープ音を再生します。
-
MetaSound を保存し、MetaSound エディタ を閉じます。
2 - レベル ブループリントを構築する
レベル ブループリントを構築し、メトロノームの Quartz Clock、サウンド、およびイベントを作成します。
2.1 - Quartz Clock を作成する
-
レベル エディタのツールバー で [Blueprint (ブループリント)] ボタンをクリックし、[Open Level Blueprint (レベル ブループリントを開く)] を選択します。
-
空白のスペースを右クリックし、Get QuartzSubsystem ノードを追加します。
-
Get QuartzSubsystem ノードで、出力ピンからドラッグし、Create New Clock ノードを追加します。
-
Create New Clock ノードで、以下の操作を行います。
-
実行入力 (>) ピンを Event BeginPlay ノードに接続します。
-
Clock Name を
LevelClockに設定します。 -
In Settings ピンからドラッグし、Make QuartzClockSettings ピンを追加します。
-
Return Value ピンからドラッグして、[Promote to Variable (変数に昇格)] を選択します。これによって Set ノードと、Quartz Clock Handle を格納するための
NewVarという名前のブループリント変数が作成され、ガベージ コレクションが行われなくなります。 -
実行出力 (>) ピンを Set (NewVar) ノードに接続します。
-
-
[My Blueprint (マイ ブループリント)] パネルで、NewVar 変数を右クリックし、[Rename (名前を変更)] を選択します。
-
変数に「
ClockHandle」という名前を付けます。 -
Make QuartzClockSettings ノードで、Time Signature からドラッグし、Make QuartzTimeSignature ノードを作成します。
-
Set (Clock Handle) ノードで、以下の操作を行います。
-
出力ピンからドラッグし、Set Beats Per Minute ノードを作成します。
-
実行出力 (>) ピンを Set Beats Per Minute ノードに接続します。
-
-
Set Beats Per Minute ノードで、Beats Per Minute を「100.0」に設定します。
2.2 - サウンドを作成する
-
Set Beats Per Minute ノード (前のセクションの最後) で 実行出力 (>) ピンからドラッグし、Create Sound 2D ノードを作成します。
-
Create Sound 2D ノードで、以下の操作を行います。
-
Sound を「
MSS_BeepA4」に設定します。 -
Return Value ピンからドラッグして、[Promote to Variable] を選択します。これによって、Set ノード、および「
NewVar」という名前の別のブループリント変数が作成されます。 -
Audio Component Output ピンからドラッグし、Set Play Multiple Instances ノードを作成します。
-
実行出力 (>) ピンを Set Play Multiple Instances ノードに接続します。
-
-
[My Blueprint] パネルで、NewVar 変数を右クリックし、[Rename] を選択します。
-
変数に「
BeepA4」という名前を付けます。 -
Set Play Multiple Instances ノードで、以下の操作を行います。
-
Play Multiple Instances をオンにします。
-
実行出力 (>) ピンからドラッグし、2 番目の Create Sound 2D ノードを作成します。
-
-
2 番目の Create Sound 2D ノードで、以下の操作を行います。
-
Sound を「
MSS_BeepA3」に設定します。 -
Return Value ピンからドラッグして、[Promote to Variable] を選択します。これによって、Set ノード、および「
NewVar」という名前の別のブループリント変数が作成されます。 -
Audio Component Output ピンからドラッグし、2 番目の Set Play Multiple Instances ノードを作成します。
-
実行出力 (>) ピンを Set Play Multiple Instances ノードに接続します。
-
-
[My Blueprint] パネルで、NewVar 変数を右クリックし、[Rename] を選択します。
-
変数に「
BeepA3」という名前を付けます。 -
2 番目の Set Play Multiple Instances ノードで、以下の操作を行います。
- Play Multiple Instances をオンにします。
2.3 - Quartz Clock を起動する
-
空白のスペースを右クリックし、Get Clock Handle ノードを追加します。
-
Get Clock Handle ノードで、出力ピンからドラッグし、Start Clock ノードを作成します。
-
Start Clock ノードで、以下の操作を行います。
-
実行入力 (>) ピンを 2 番目の Set Play Multiple Instances ノード (前のセクションの最後) に接続します。
-
Clock Handle ノードからドラッグし、Subscribe to All Quantization Events ノードを作成します。
-
実行出力 (>) ピンを Subscribe to All Quantization Events ノードに接続します。
-
-
Subscribe to All Quantization Events ノードで、On Quantization Event ピンからドラッグし、Create Event ノードを作成します。
-
Create Event ノードで、以下の操作を行います。
-
ドロップダウンをクリックし、[Create a matching event] を選択します。これにより、新しい Custom Event ノードが作成されます。
-
Custom Event に「
OnQuantizationEvent」という名前を付けます。
-
2.4 - Event Delegate を構築する
-
OnQuantizationEvent ノードで、以下の操作を行います。
-
QuantizationType ピンからドラッグし、Switch on EQuartzCommandQuantization ノードを作成します。
-
実行出力 (>) ピンを Switch on EQuartzCommandQuantization ノードに接続します。
-
QuantizationType ピンからドラッグし、Make QuartzQuantizationBoundary ノードを作成します。
-
QuantizationType ピンからドラッグし、2 番目の Make QuartzQuantizationBoundary ノードを作成します。
-
-
両方の Make QuartzQuantizationBoundary ノードで、Counting Reference Point を Transport Relative に設定します。
-
Switch on EQuartzCommandQuantization ノードで、以下の操作を行います。
-
Bar ピンからドラッグし、Play Quantized ノードを作成します。
-
Beat ピンからドラッグし、2 番目の Play Quantized ノードを作成します。
-
-
最初の Play Quantized ノードで、以下の操作を行います。
-
Target ピンからドラッグして、Get Beep A4 ノードを作成します。
-
In Clock Handle ピンからドラッグし、Get Clock Handle ノードを作成します。
-
In Quantization Boundary ピンを Make QuartzQuantizationBoundary ノードのいずれかの出力ピンに接続します。
-
-
2 番目の Play Quantized ノードで、以下の操作を行います。
-
Target ピンからドラッグして、Get Beep A3 ノードを作成します。
-
In Clock Handle ピンからドラッグし、Get Clock Handle ノードを作成します。
-
In Quantization Boundary ピンを Make QuartzQuantizationBoundary ノードの接続されていないいずれかの出力ピンに接続します。
-
-
ブループリントをコンパイルして保存します。
-
ブループリント エディタ を閉じます。
2.5 - レベルをテストする
レベル エディタのツールバー で [Play (プレイ)] ボタンをクリックします。低周波ビープ音の MetaSound は一拍ごとに、高周波ビープ音の MetaSound は一小節ごとに再生されます。
3 - ブループリント アクタをビルドする
レベル ブループリントで設定した Quartz Clock の拍を使用した Cube コンポーネントにより、ブループリント アクタを作成します。
3.1 - ブループリント アクタを作成する
-
コンテンツ ブラウザ で [Add (追加)] ボタンをクリックします。
-
[Blueprint Class (ブループリント クラス)] を選択します。
-
[Pick Parent Class (親クラスを選択)] ウィンドウで [Actor (アクタ)] を選択します。
-
新しいブループリント アクタに「
BP_QuartzCube」という名前を付けます。 -
ブループリント アクタをダブルクリックして、ブループリント エディタ を開きます。
-
[Components (コンポーネント)] パネルで、[Add] ボタンをクリックし、「Cube」を検索バーに入力し、Enter を押します。
3.2 - アクタのイベント グラフでレベル クロックを取得する
-
空白のスペースを右クリックし、Get QuartzSubsystem ノードを追加します。
-
Get QuartzSubsystem ノードで、出力ピンからドラッグし、Get Handle for Clock ノードを追加します。
-
Get Handle for Clock ノードで、以下の操作を行います。
-
実行入力 (>) ピンを Event BeginPlay ノードに接続します。
-
Clock Name を
LevelClockに設定します。 -
Return Value ピンからドラッグし、Subscribe to Quantization Event ノードを作成します。
-
実行出力 (>) ピンを Subscribe to Quantization Event ノードに接続します。
-
-
Subscribe to Quantization Event ノードで、以下の操作を行います。
-
In Quantization Event を Beat に設定します。
-
Return Value ピンからドラッグして、[Promote to Variable] を選択します。これによって、Quartz Clock Handle を格納するための「
Clock Handle」という名前のブループリント変数が作成され、ガベージ コレクションが行われなくなります。 -
実行出力 (>) ピンを Set (Clock Handle) ノードに接続します。
-
On Quantization Event ピンからドラッグし、Create Event ノードを作成します。
-
-
Create Event ノードで、以下の操作を行います。
-
ドロップダウンをクリックし、[Create a matching event] を選択します。これにより、新しい Custom Event ノードが作成されます。
-
Custom Event に「
OnBeat」という名前を付けます。
-
3.3 - 拍のアクタをスケーリングする
-
OnBeat ノードで、以下の操作を行います。
-
実行出力 (>) ピンからドラッグし、Set Actor Scale 3D ノードを作成します。
-
Beat ピンを Set Actor Scale 3D ノードの New Scale 3D ピンに接続します。これにより、自動的に To Vector (Integer) ノードが作成されます。
-
-
ブループリントをコンパイルして保存します。
-
ブループリント エディタ を閉じます。
4 - レベル ブループリントを変更する
BP_QuartzCube をスポーンするためのロジックをレベル ブループリントに追加します。
-
レベル エディタのツールバー で [Blueprint (ブループリント)] ボタンをクリックし、[Open Level Blueprint (レベル ブループリントを開く)] を選択します。
-
Subscribe to All Quantization Events ノード (セクション 2.3 のもの) で、実行出力 (>) ピンをドラッグし、Spawn Actor from Class ノードを作成します。
-
Spawn Actor ノードで、以下の操作を行います。
-
Class を「
BP_QuartzCube」に設定します。 -
Spawn Transform ピンからドラッグして、[Promote to Variable] を選択します。
-
-
ブループリントをコンパイルします。
-
Spawn Transform ノードを選択します。
-
[Details] パネルで、[Default Value] > [Spawn Transform] > [Location] を「1600.0, 1200.0, 200.0」に設定します。
-
ブループリントをコンパイルして保存します。
-
ブループリント エディタ を閉じます。
5 - レベルをテストする
レベル エディタのツールバー で [Play (プレイ)] ボタンをクリックします。レベル内に BP_QuartzCube がスポーンし、メトロノームの拍でスケーリングされるようになります。