WwiseとUnityでオーディオリアクティブなオブジェクトを作る方法

ゲームオーディオ / インタラクティブミュージック

今回は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で作成します。
1_make_project_unity

WwiseのUnityへのインテグレーション

WwiseのUnityへのインテグレーションの方法を知っている方は、Wwiseのセットアップへスキップしてしまって構いません。今回使用しているWwiseのバージョンは,2021.1.8.7831です。
Unityを一旦終了し(Unity Hubも閉じてください)、Wwise Launcherを起動します。
Unityタブを選択し、Integrate Wwise into Projectをクリックします。
2_Wwise_integrate_to_unity_akkk

下のような画面が表示されます。一番上の段のPackages and deployment platformsについてはそのままでいいでしょう。
3_Wwise_Integration_page-1


Wwise Project Pathは空白にしておいてください。Unity Installationでお使いのUnityのバージョンを選択してください。

4_Wwise_integration_page-2


Integrateをクリックすると自動的にインテグレーションがはじまります。Unity Hubが開いていると成功しないことがあります。インテグレーションが失敗した場合はUnity Hubが閉じてあることを確認してください。
5_Wwise_integration_processing_akkk


オペレーションが完了すると、下のように表示されます。Open in Wwiseといった新しい項目が選択できるようになります。Open in Unityはグレーアウトのままですが、Macではこの機能が使えないようなので気にしなくて大丈夫です。UnityプロジェクトはUnity Hubから普通に起動できます。
6_Wwise_integration_success


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にはオーディオリアクティブ用の音源を入れています。お好きな音楽を使用してください。
7_Wwise_project_setup

Play_ChillとPlay_RTPCtestというPlay Eventをそれぞれ作成し、SoundBankを生成します。SoundBankを作らないと、Unity側でSoundBankが見つからないといった警告が出てしまいます。

Game Parameterの作成とRTPCへの割り当て

Game Syncsタブで、RTPC_Control_UnityというGame Parameterを作成します。8_game_parameter


作成したGame Parameterの項目をダブルクリックし、Property Editorを開きます。Max値を1に設定します。
9_game_parameter_property_editor


Designerレイアウトに戻り、RTPCtest Sound SFXオブジェクトのRTPCで,Voice Pitchを先ほど作成したRTPC_Control_Unityに割り当てます。RTPCグラフを下のようにセットします。
10_RTPC_Pitch


これでRTPCtest用のRTPCのセットアップが完了しました。続いてオーディオリアクティブ用のRTPC設定に入ります。

オーディオリアクティブ用のAudio Busの準備とRTPCの設定

今度はUnityオブジェクトをオーディオ信号のレベルで制御するためのAudio Busを作り、それにRTPCを設定します。具体的には新たに作ったAudio Busへメータープラグインをインサートし、その出力先をRTPCに割り当てます。
まず、Master Audio Busの下に新たにTo UnityというAudio Busを作成します。
11_new_audio_bus

作成したAudio BusのProperty Editorで,Effectタブを選択し、Wwise Meterプラグインを挿入します。Meterプラグインを挿入する際はNewではなく、Default(Custom)を選択してください。
12_Effect


13_add_Meter_default

右端のEditボタンを押し、Effect Editorを開きます。Output Game Parameterのセレクターボタンを押してNewをクリックし、新しく Meter_Control_UnityというGame Parameterを作成します。
14_assign_rtpc_to_meter

最後にAudio Reactiveに使いたい音楽の出力先をこのバスに割り当てます。Chill Sound SFXオブジェクトの出力先をTo Unityに設定してください。
15_audio_outputbus

以上でUnityでオーディオリアクティブを作るためのWwise側の設定が完了しました。

 

Unityのセットアップ

UnityでURPを作成すると以下のような、建設現場のサンプルシーンが用意されます。まずWwiseでRTPCパラメータカーソルを動かすと、それに反応して大きさを変えるようなゲームオブジェクトを作りましょう。ここでは机の上にあるヘルメット(Safety Hat)を動かしてみることにします。
16_safety_hat

カスタムAkBankスクリプト

まずUnityでSoundBankをロードするスクリプトをつくりましょう。Wwiseで用意してあるAkBankスクリプトを使ってもいいのですが、ほとんどの機能はここでは使わないため、カスタムスクリプトを作成します。ProjectウィンドウからAsset > Scriptフォルダーへ移動し,フォルダー内の余白で右クリックをし、Create > C# Scriptをクリックして、新規C#スクリプトを作成します。
17_create_script

新規に作成したスクリプトを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オブジェクトに貼り付けます。
18_add_Load_Bank

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ウィンドウにドラッグ&ドロップして貼り付けます。
19_attach_script


RTPC IDがNo GameParameter is currently selectedと表示されています。これはまだWwiseのどのGameParameterを割り当てるのか指定されていないためです。
20_no_game_parameter

ここをクリックして、RTPC_Control_Unityを選択しましょう。
21_assign_game_parameter

これでRTPCパラメータカーソルから、Unityのヘルメットの大きさを変える準備ができました。

RTPCパラメータカーソルを動かしてテストしてみよう

それではWwiseをUnityに接続し、RTPCパラメータカーソルを動かして、ゲームオブジェクトがきちんと動作するか試してみましょう。
WwiseのConnect to Remote Platform (Shift + H)を押します。
22_connect_to_unity

一覧から接続先を選択して、Unityに接続します。
23_connect_to_unity_2

UnityでPlayを押します。再生を押してRTPCtestをWwiseで再生し、RTPCパラメータカーソルを冒頭の動画のように動かしてみてください。
いかがでしたでしょうか。これでRTPCの値によってゲームオブジェクトのスケールを変えることができるようになりました。物体が小さくなるにつれてピッチが上がり、大きくなると、ピッチが下がります。ゲームオブジェクトのスケールだけでなく、スクリプトを変更することで、ゲームオブジェクトの位置を変えたり、回転させたり、マテリアルの色を変えたりといったいろいろなインタラクションができるようになります。マテリアルの色を変えるスクリプトは、次のオーディオ・リアクティブ・オブジェクトの項目でお伝えします。

 

オーディオ・リアクティブ・オブジェクト

ここまでで、RTPCを受け取ってゲームオブジェクトのスケールを変える方法を学びました。今度は手でRTPCを動かすのではなく、オーディオ信号の振幅でゲームオブジェクトに変化をさせていきたいと思います。基本的な手順は一緒ですが、メーターが出力するRTPCの値を若干調整する必要があります。

オーディオメータープラグインの値をカスタムスクリプトで受け取る

オーディオメーターの出力は-48 ~ 0の範囲です。
24_meter_min

負の値ではスケールなどを調整する際に都合が悪いため、まず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
(画像: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);

         }
}

 

ゲームオブジェクトに挿入すると、以下のようになります。
26_color_change_script


マテリアルを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

廣木 智一(TOMOKAZU HIROKI)

廣木 智一(TOMOKAZU HIROKI)

Wwise認定インストラクター。Wwise認定校Akey Studio代表。バークリー音楽大学院(ミュージックプロダクション・テクノロジー・イノベーション専攻)でM.M.(音楽修士)、バークリー音楽大学Post Master’s Degree Fellowship(フェローシップ)を修了。Artful Designというコンセプトを軸に,XR音楽インターフェイスOPSYNなどを研究(Epic Games社よりEpic MegaGrantsを受賞)。イマーシブメディア,インタラクティブオーディオ領域に関心があり,その知見を深めたり,共有するため,オンラインコンテンツを作成しています。 ブログ: https://jp.thiroki.com

 @Tzmix

コメント

Replyを残す

メールアドレスが公開されることはありません。

ほかの記事

Total War: WARHAMMER 2: 音楽構成を決め、音楽システムを活用するまで

Total Warシリーズのビデオゲームを知らない読者のために説明すると、Total...

2.7.2019 - 作者 _CREATIVE ASSEMBLY_

Another Sightのサウンドの、舞台裏をのぞく

27.8.2019 - 作者 ルカ・ピッチーナ(LUCA PICCINA)

無限の残骸:Infinite Wreckage

これは『Wreckage Systems 』(65daysofstatic作)に関するブログです。『Wreckage Systems...

17.8.2023 - 作者 ポール・ウォランスキ

アイコニックなパズルゲームをビートに合わせて

1年以上も前のことですが、新しいゲームの仕事で声をかけられた時、それがまさかあの有名なフランチャイズゲーム『テトリス®』であろうとは思ってもいませんでした。...

31.10.2023 - 作者 ウリエル・オロスコ

『Unpacking』のフォーリーに秘められた面白さ

20.5.2024 - 作者 ジェフ・ヴァン・ダイク

Wwiseでアンビエンスシステムをデザインする

はじめに...

19.11.2024 - 作者 ルイス・トンプソン

ほかの記事

Total War: WARHAMMER 2: 音楽構成を決め、音楽システムを活用するまで

Total Warシリーズのビデオゲームを知らない読者のために説明すると、Total...

Another Sightのサウンドの、舞台裏をのぞく

無限の残骸:Infinite Wreckage

これは『Wreckage Systems 』(65daysofstatic作)に関するブログです。『Wreckage Systems...