三日でUnity上のWwiseを理解する1日目

Unityでwwiseを使う

※今回はゲームジャムで作成したゲーム「OverThere」を元に書いていきます。

ソースはこちら

github.com

 

準備段階

UnityでWwiseを使う際にはUnityにWwiseのAssetsを読み込ませる必要がある。

公式のドキュメントはこちら

www.audiokinetic.com

 

方法としてはまず最初に空のWwiseファイルを作成ておく。

次にWwise launcherにUnityのプロジェクトを登録すると、

f:id:OtObOx:20190522132542p:plain

分かりにくいがここからUnityのプロジェクトを登録できる

プロジェクトに対してWwisewiseをintegrationさせるボタンが表示され、

modify画面から各種パスを設定すれば必要なファイルが自動でダウンロードされ、

Unityのプロジェクトに対してWwiseのAssetがintegrationされる。

(少々の時間がかかる)

f:id:OtObOx:20190522132310p:plain

うまく行くとこんな感じでwwiseとUnityどちらもwwise launcherからファイルが開けるようになる。

実際にUnityを起動しWwise Pickerが使用できる状態になってたら下準備は完成。

f:id:OtObOx:20190522150141p:plain

画面左下。出ていなければUnity>windowから表示できると思う

実際に音を組み込んでいく

前提としてWwiseはゲームコールをゲーム側から受け取ってそれをきっかけにWwise側で割り当てられた音声が再生されるのでUnity側ではこのWwise用のゲームコールを出す仕組みが必要になる。

Unityの扱い方がわかっておりコンポーネントの内容が知りたい方は公式が少しだけまとめてくれているのでこちらを参照してください。

www.audiokinetic.com

ここから先はUnityに慣れてない人を前提に書いていきます。

 

※ここからはtitleシーンを用いて書いていきます。

Audio Listener

まず最初にUnityのEdit>Wwise Settings..を開く

f:id:OtObOx:20190522140056p:plain

このようなウィンドウが表示される

そして「Automatically add Listener to Main Camera」にチェックが入ってると思われるのでこれを外す

このチェックが入ってると読んで字のごとくシーン内のMain Cameraに自動的にListenerが追加される。

この設定はシーン関係なく全体の設定なので一度設定してしまえば再度設定する必要はなくなる

コンポーネントとしてはAk Audio Listenerが追加される)

f:id:OtObOx:20190522140723p:plain

これはゲーム内で発生した音をどのオブジェクトが聴くかというのを決める重要なコンポーネントで、このコンポーネントをどこに挿したか認識していない場合音声が右側に偏ったり、プロジェクトが進んでいくにつれてListnerが2ヶ所できた結果、すべての音量が倍増するなんてことにもなるので、チェックを外したほうが後々致命的なミスを避けられることになる。

他のメンバーとコンフリクトしないよう最初に設定すると安心。

 

その上でコンポーネント「Ak Audio Listener」をプレイヤーが音声を聞く位置にあるオブジェクトに挿す。(基本的にはMain Camera)

 

Ak Game obj

Ak Audio Listenerを指すと必ずAk Game Objコンポーネントが同じオブジェクトに挿される。

f:id:OtObOx:20190522142537p:plain

こんな感じ

これはWwise側でこのオブジェクトの位置を認識するために必ず必要なコンポーネントとなるのでAkなんとかコンポーネントを指すと常に付随する。

試しにAk Game Objを外そうとすると怒られるはず。

WwiseはこのAk Game Objを通してUnityとは別に独自の3D空間を作りそこでどの位置に音が鳴るかを決める。

また、どのListenerから音を鳴らすかも決めている。

 

Ak Bank

聴く場所を決めたので音が鳴るオブジェクトを用意するが、まず最初にAk Bankというコンポーネントを必ず用いらなければならない。

 

f:id:OtObOx:20190522144639p:plain



これはWwise側で作成したSoundBankを読み込むコンポーネントで、

Ak Bankが定義されていない場合、後に紹介するAk Event等で音を再生しようとしても音が見つからないと言われ音声が再生されない。

しかしAk Bankコンポーネントは、同じbankを複数のオブジェクトで読み込む、またシーン越しに同じbankを読み込むとエラーを吐くのでどれか一つのオブジェクトでAk Bankコンポーネントを設定すれば他のオブジェクトに設定する必要はない。

恐らくこの辺りはMainCameraとかに挿すのが適当ではないかと思う

Name:に該当のSoundBankを指定すればOK

Ak Event ~BGM編~

聴く位置、SoundBankを読み込んでやっと音が鳴らせる状態になったので、まずはゲームで必ずといいほど使用するBGMを付ける。

今回のゲーム内BGMはプレイヤーの位置によって音が左右にパンがずれたり距離によって減衰したりしないのでAk Eventを使う。

f:id:OtObOx:20190522145846p:plain

とってもよく使うコンポーネント

Trigger On: 
どの動作で音を鳴らすか
Action On Event: 
wwise側で設定されているパラメータの一部分をここで上書きすることができる
Use Callback: 
このAk Eventが発生した際に他のコンポーネントを作用させるときに使う。

 

Trigger On:該当のオブジェクトが表示された=ゲームが開始されたらBGMを再生されるようにしたいため、Startに設定する

この条件は複数選択することができるのでNothingを選択後、条件を指定する。

 

不備がなければUnityで該当シーンを再生した際曲が流れるはず。

※Unityで1度も再生していない場合コンポーネント内のPlayを押しても再生されない

BGMはこのオブジェクトがなくなるまで発し続けるのでシーンが変わったり何らかの作用によってオブジェクトが消されると自動的に止まる。(音の発生源がなくなる)

 

Ak Event ~効果音編~

ゲームの中では効果音も重要だ。UIのボタンを押し、音が鳴るとより"押した感"が出てユーザーをゲームの中へより引き込むことができる

UnityではButtonのコンポーネントが使われてることが多いと思うのでこれを前提に音を付けていく。

f:id:OtObOx:20190522195809p:plain

buttonのコンポーネント

まずボタンのオブジェクトにAk Eventを追加し、BGMの時と同じようにName:に鳴らしたい効果音を選択する。

次にTrigger On:だが今回はどの条件も当てはまらないのでNothingを選択する。

f:id:OtObOx:20190522200416p:plain

こんな感じ

次にButtonコンポーネントを編集する必要がある。

編集といってもC#を描く必要はなく、マウスでぽちぽちすれば出来上がる。

 

Buttonコンポーネント右下にある「+」マークをクリックし枠を増やす。

f:id:OtObOx:20190522200805p:plain

下側が新たに増えた枠。上側は別のシーンに移動するC#が選択されている

OnClick()とはつまりクリックされた際に何が起こるかを入れる場所となっている。

枠を増やした後に該当のボタンをhierarchy(Unity左側)からボタンのオブジェクトをドラックアンドドロップする。

するとグレーアウトしたNo Functionが選択できるようになったと思うので、ここから

AkEvent>AkEvent.HandleEventを選択する

f:id:OtObOx:20190522201306p:plain

これで完成

あとはUnityを再生しゲーム画面で該当のボタンをクリックした際に音声が再生されていれば実装完了。

 

ここまでできると大体の流れが把握できたと思う。

Trigger On:の条件をAkTriggerCollisionEnterにしてやれば当たり判定が発生した際に音声がされるし(ぶつかった時の音等)Destroyにすればオブジェクトが無くなった際に音声が再生されるようになる(破壊音等)

ただしこういった3Dゲーム上での効果音はAkEventではなくAkAmbientというコンポーネントを使ったほうが良いのでそちらを使おう。

※AkAmbientについては二日目に記載します。

 

まとめ。

流れとしてはdefaultListenerで聴く位置を決め、SoundBankをロードしAkEventで音声を再生する!

注意事項としては同じSoundBankを読み込まないようにすればここまでの知識だけでもUnity上でそれなりに音が鳴るようになったと思いますので、

一日目はここまで!