今回はWwiseのRTPCを使ってUnity内のゲームオブジェクトを動かす方法と、オーディオドリブン – Audio Reactiveなオブジェクトを作る方法をご紹介したいと思います。なお、この記事はWwise-101の知識を持った方を対象にしております。またUnityでコードを書いたことがない方でも理解しやすいように解説しております。Wwiseの基本的な使い方が分からない方は、Wwise-101技能検定コース、もしくは私の方でもオンラインコースを出しています。ご興味のある方はこのブログの最後のリンクをご覧ください。
WwiseとUnityでオーディオリアクティブなオブジェクトを作る方法
ゴールプロジェクトの準備
Unityプロジェクトの作成
WwiseのUnityへのインテグレーション
Wwiseのセットアップ
Sound SFX, Event, Sound Bankの生成
Game Parameterの作成とRTPCへの割り当て
オーディオリアクティブ用のAudio Busの準備とRTPCの設定
Unityのセットアップ
カスタムAkBankスクリプト
RTPCを受け取って、ゲームオブジェクトに変化を与えるスクリプト
RTPCパラメータカーソルを動かしてテストしてみよう
オーディオ・リアクティブ・オブジェクト
オーディオメータープラグインの値をカスタムスクリプトで受け取る
音に合わせてマテリアルの色も変化させてみよう
おわりに
参考
ゴール
私は常々、オーディオから映像を制御するようなAudio Visualに関心を持っています。UnityからWwiseをコントロールする情報はたくさんありますが、その逆の情報はあまりありません。色々調べた結果意外と簡単にできたので、やり方を共有したいと思います。LumoteのVFXをWwiseで動かすというAudiokineticのブログにインスピレーションを受けたのですが、詳細な手順がここには載っていなかったため、この記事では具体的にMeterプラグインを使って、どのようにオーディオリアクティブなオブジェクトを作るのかという方法をご紹介したいと思います。
この記事を読むことで、RTPCパラメータカーソルを動かしてUnityのゲームオブジェクトを操作したり、
YouTube: Wwise + Unity | Change the Scale of the Game Object with RTPC
オーディオリアクティブなオブジェクトを作れるようになります。
Youtube: Wwise + Unity | Audio Reactive
プロジェクトの準備
それでは、プロジェクトに取り掛かる前にUnityとWwiseのプロジェクトを作成していきます。
Unityプロジェクトの作成
Unity Hubを起動して、Unity Projectを作成します。今回Unityのバージョンは2020.3.12f1(LTS)を使います。プロジェクトはURPで作成します。WwiseのUnityへのインテグレーション
WwiseのUnityへのインテグレーションの方法を知っている方は、Wwiseのセットアップへスキップしてしまって構いません。今回使用しているWwiseのバージョンは,2021.1.8.7831です。
Unityを一旦終了し(Unity Hubも閉じてください)、Wwise Launcherを起動します。
Unityタブを選択し、Integrate Wwise into Projectをクリックします。
下のような画面が表示されます。一番上の段のPackages and deployment platformsについてはそのままでいいでしょう。
Wwise Project Pathは空白にしておいてください。Unity Installationでお使いのUnityのバージョンを選択してください。
Integrateをクリックすると自動的にインテグレーションがはじまります。Unity Hubが開いていると成功しないことがあります。インテグレーションが失敗した場合はUnity Hubが閉じてあることを確認してください。
オペレーションが完了すると、下のように表示されます。Open in Wwiseといった新しい項目が選択できるようになります。Open in Unityはグレーアウトのままですが、Macではこの機能が使えないようなので気にしなくて大丈夫です。UnityプロジェクトはUnity Hubから普通に起動できます。
Wwiseのセットアップ
Sound SFX, Event, Sound Bankの生成
それではWwiseの方のセットアップをしていきましょう。Wwise LauncherでOpen in Wwise 2021.1.8.7831をクリックしてWwiseを起動します。このプロジェクトではChillとRTPCtestという2つのSound SFX Objectを用意しております。RTPCtestはソース音源として、Wwise Sineをインサートしています。インサート後、General Settingsタブ内のLoopをオンにして、再生を押した際にずっと鳴らし続けるようにしておきます。Chillにはオーディオリアクティブ用の音源を入れています。お好きな音楽を使用してください。Play_ChillとPlay_RTPCtestというPlay Eventをそれぞれ作成し、SoundBankを生成します。SoundBankを作らないと、Unity側でSoundBankが見つからないといった警告が出てしまいます。
Game Parameterの作成とRTPCへの割り当て
Game Syncsタブで、RTPC_Control_UnityというGame Parameterを作成します。
作成したGame Parameterの項目をダブルクリックし、Property Editorを開きます。Max値を1に設定します。
Designerレイアウトに戻り、RTPCtest Sound SFXオブジェクトのRTPCで,Voice Pitchを先ほど作成したRTPC_Control_Unityに割り当てます。RTPCグラフを下のようにセットします。
これでRTPCtest用のRTPCのセットアップが完了しました。続いてオーディオリアクティブ用のRTPC設定に入ります。
オーディオリアクティブ用のAudio Busの準備とRTPCの設定
今度はUnityオブジェクトをオーディオ信号のレベルで制御するためのAudio Busを作り、それにRTPCを設定します。具体的には新たに作ったAudio Busへメータープラグインをインサートし、その出力先をRTPCに割り当てます。まず、Master Audio Busの下に新たにTo UnityというAudio Busを作成します。
作成したAudio BusのProperty Editorで,Effectタブを選択し、Wwise Meterプラグインを挿入します。Meterプラグインを挿入する際はNewではなく、Default(Custom)を選択してください。
右端のEditボタンを押し、Effect Editorを開きます。Output Game Parameterのセレクターボタンを押してNewをクリックし、新しく Meter_Control_UnityというGame Parameterを作成します。
最後にAudio Reactiveに使いたい音楽の出力先をこのバスに割り当てます。Chill Sound SFXオブジェクトの出力先をTo Unityに設定してください。
以上でUnityでオーディオリアクティブを作るためのWwise側の設定が完了しました。
Unityのセットアップ
UnityでURPを作成すると以下のような、建設現場のサンプルシーンが用意されます。まずWwiseでRTPCパラメータカーソルを動かすと、それに反応して大きさを変えるようなゲームオブジェクトを作りましょう。ここでは机の上にあるヘルメット(Safety Hat)を動かしてみることにします。カスタムAkBankスクリプト
まずUnityでSoundBankをロードするスクリプトをつくりましょう。Wwiseで用意してあるAkBankスクリプトを使ってもいいのですが、ほとんどの機能はここでは使わないため、カスタムスクリプトを作成します。ProjectウィンドウからAsset > Scriptフォルダーへ移動し,フォルダー内の余白で右クリックをし、Create > C# Scriptをクリックして、新規C#スクリプトを作成します。
新規に作成したスクリプトをLoadBankと名前をつけます。LoadBankスクリプトをダブルクリックして開き、以下の内容に置き換えます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadBank : MonoBehaviour
{
public AK.Wwise.Bank soundBank;
// Start is called before the first frame update
void Start()
{
soundBank.Load();
}
}
SoundBankをゲームがはじまった時にロードするだけのシンプルなスクリプトです。セーブして、作成したスクリプトをWwiseGlobalオブジェクトに貼り付けます。
SoundBankの欄で、Wwiseで作成したSoundBankを選択してください。
RTPCを受け取って、ゲームオブジェクトに変化を与えるスクリプト
次にRTPCを受け取って,それを元にゲームオブジェクトのスケールを変更するようなスクリプトを作ります。
新規スクリプトをSmplRTPCListnerと命名します。
以下がRTPCを受け取ってゲームオブジェクトの大きさを変えるスクリプトとなります。中身を置き換えてセーブしましょう。
using UnityEngine;
public class SmplRTPCListener : MonoBehaviour
{
//set your RTPCID to the name of your desired gameparameter (under GameSyncs)
public AK.Wwise.RTPC rtpcID;
void Update()
{
// will contain the value of the RTPC parameter
float value = rtpcID.GetGlobalValue();
// which would scale by the value of the RTPC parameter
transform.localScale = new Vector3(value, value, value);
}
}
Hierarchy ウィンドウからSafety Hatを選択して、このスクリプトをSafetyHatのInspectorウィンドウにドラッグ&ドロップして貼り付けます。
RTPC IDがNo GameParameter is currently selectedと表示されています。これはまだWwiseのどのGameParameterを割り当てるのか指定されていないためです。
ここをクリックして、RTPC_Control_Unityを選択しましょう。
これでRTPCパラメータカーソルから、Unityのヘルメットの大きさを変える準備ができました。
RTPCパラメータカーソルを動かしてテストしてみよう
それではWwiseをUnityに接続し、RTPCパラメータカーソルを動かして、ゲームオブジェクトがきちんと動作するか試してみましょう。
WwiseのConnect to Remote Platform (Shift + H)を押します。
一覧から接続先を選択して、Unityに接続します。
UnityでPlayを押します。再生を押してRTPCtestをWwiseで再生し、RTPCパラメータカーソルを冒頭の動画のように動かしてみてください。
いかがでしたでしょうか。これでRTPCの値によってゲームオブジェクトのスケールを変えることができるようになりました。物体が小さくなるにつれてピッチが上がり、大きくなると、ピッチが下がります。ゲームオブジェクトのスケールだけでなく、スクリプトを変更することで、ゲームオブジェクトの位置を変えたり、回転させたり、マテリアルの色を変えたりといったいろいろなインタラクションができるようになります。マテリアルの色を変えるスクリプトは、次のオーディオ・リアクティブ・オブジェクトの項目でお伝えします。
オーディオ・リアクティブ・オブジェクト
ここまでで、RTPCを受け取ってゲームオブジェクトのスケールを変える方法を学びました。今度は手でRTPCを動かすのではなく、オーディオ信号の振幅でゲームオブジェクトに変化をさせていきたいと思います。基本的な手順は一緒ですが、メーターが出力するRTPCの値を若干調整する必要があります。オーディオメータープラグインの値をカスタムスクリプトで受け取る
オーディオメーターの出力は-48 ~ 0の範囲です。
負の値ではスケールなどを調整する際に都合が悪いため、まず48を足して0 ~ 48の値になるようにします。これを48で割ることによって、0から1の間の値を取ることができます。これをもとに先ほど作ったSmplRTPCListnerスクリプトに変更を加えたのが下になります。
using UnityEngine;
public class SmplRTPCListener : MonoBehaviour
{
//set your RTPCID to the name of your desired gameparameter (under GameSyncs)
public AK.Wwise.RTPC rtpcID;
public mySize;
void Update()
{
// will contain the value of the RTPC parameter
float value = (rtpcID.GetGlobalValue() + 48f) / 48f * mySize;
// which would scale by the value of the RTPC parameter
transform.localScale = new Vector3(value, value, value);
//transform.localPosition = new Vector3(value, value, value);
}
}
さらにここではmySizeという変数を掛け合わせることによって、大きさをUnityのGUIからも調整できるようにしてあります。
RTPC IDをMeter_Control_Unityにし、My Sizeで0以上の値を指定してください。
(画像:25_script_setting)
Wwiseと繋げて、音楽を再生してみてください。
オーディオの音量に合わせて、ゲームオブジェクトが動いているのが確認できると思います。
音に合わせてマテリアルの色も変化させてみよう
またマテリアルの色を音に応じて変化させることのできるスクリプトも作ってみました。
using UnityEngine;
public class Color_RTPC : MonoBehaviour
{
//public Material ReferenceToMaterial;
public AK.Wwise.RTPC MyColor;
public Material ReferenceToMaterial;
//Adjust the intensity of the color
public float glow = 1f;
public float colorR;
public float colorG;
public float colorB;
// Update is called once per frame
void Update()
{
// will contain the value of the RTPC parameter
float value = (MyColor.GetGlobalValue() + 48f) / 48f * glow;
Debug.Log(value);
// which would scale by the value of the RTPC parameter
ReferenceToMaterial.color = new Color(value * colorR, value * colorG, value * colorB);
}
}
ゲームオブジェクトに挿入すると、以下のようになります。
マテリアルをReference To Materialにドラッグ&ドロップしてください。またMy Colorセクションで、先ほど同様にMeter_Control_Unityを選択してください。Glowで光の強さ、Color R, G, Bでそれぞれ、赤、緑、青の強さを設定できます。
これで大きさだけでなく、ゲームオブジェクトのマテリアルの色も音に合わせて変化することができるようになりました。
おわりに
WwiseからUnityをコントロールすることで、Unity内で今までにない表現ができるようになったのではないでしょうか。今日作ったカスタムスクリプトを様々なゲームオブジェクトに付け加えることで、冒頭のように何の変哲もない工事現場を華やかなパーティー会場に一瞬で変えることができます。ぜひこれを発展させて色々なオーディオ・リアクティブ・プロジェクトを作ってみてください。
参考
LumoteのVFXをWwiseで動かす
https://blog.audiokinetic.com/ja/lumote-using-wwise-to-drive-in-game-vfx/
Get RTPC value from Wwise in Unity
https://vraasp.wordpress.com/2018/01/19/getrtpc-in-wwise-2017-2-and-unity/
One Minute Wwise | Driving Visuals from Volume Output
https://www.youtube.com/watch?v=36eWf59E_TU
How can I access RTPC game parameters in Unity?
https://www.audiokinetic.com/qa/384/how-can-i-access-rtpc-game-parameters-in-unity
Wwise-110テスト
https://akeystudio.com/wwise110-comingsoon/
Wwiseオンラインコース
https://www.udemy.com/course/wwise110/?referralCode=E79FBF81DF08A131F4E0
コメント