三日でUnity上のWwiseを理解する1日目
Unityでwwiseを使う
※今回はゲームジャムで作成したゲーム「OverThere」を元に書いていきます。
ソースはこちら
準備段階
UnityでWwiseを使う際にはUnityにWwiseのAssetsを読み込ませる必要がある。
公式のドキュメントはこちら
方法としてはまず最初に空のWwiseファイルを作成ておく。
次にWwise launcherにUnityのプロジェクトを登録すると、
プロジェクトに対してWwisewiseをintegrationさせるボタンが表示され、
modify画面から各種パスを設定すれば必要なファイルが自動でダウンロードされ、
Unityのプロジェクトに対してWwiseのAssetがintegrationされる。
(少々の時間がかかる)
うまく行くとこんな感じでwwiseとUnityどちらもwwise launcherからファイルが開けるようになる。
実際にUnityを起動しWwise Pickerが使用できる状態になってたら下準備は完成。
実際に音を組み込んでいく
前提としてWwiseはゲームコールをゲーム側から受け取ってそれをきっかけにWwise側で割り当てられた音声が再生されるのでUnity側ではこのWwise用のゲームコールを出す仕組みが必要になる。
Unityの扱い方がわかっておりコンポーネントの内容が知りたい方は公式が少しだけまとめてくれているのでこちらを参照してください。
ここから先はUnityに慣れてない人を前提に書いていきます。
※ここからはtitleシーンを用いて書いていきます。
Audio Listener
まず最初にUnityのEdit>Wwise Settings..を開く
そして「Automatically add Listener to Main Camera」にチェックが入ってると思われるのでこれを外す
このチェックが入ってると読んで字のごとくシーン内のMain Cameraに自動的にListenerが追加される。
この設定はシーン関係なく全体の設定なので一度設定してしまえば再度設定する必要はなくなる
(コンポーネントとしてはAk Audio Listenerが追加される)
これはゲーム内で発生した音をどのオブジェクトが聴くかというのを決める重要なコンポーネントで、このコンポーネントをどこに挿したか認識していない場合音声が右側に偏ったり、プロジェクトが進んでいくにつれてListnerが2ヶ所できた結果、すべての音量が倍増するなんてことにもなるので、チェックを外したほうが後々致命的なミスを避けられることになる。
他のメンバーとコンフリクトしないよう最初に設定すると安心。
その上でコンポーネント「Ak Audio Listener」をプレイヤーが音声を聞く位置にあるオブジェクトに挿す。(基本的にはMain Camera)
Ak Game obj
Ak Audio Listenerを指すと必ずAk Game Objコンポーネントが同じオブジェクトに挿される。
これはWwise側でこのオブジェクトの位置を認識するために必ず必要なコンポーネントとなるのでAkなんとかコンポーネントを指すと常に付随する。
試しにAk Game Objを外そうとすると怒られるはず。
WwiseはこのAk Game Objを通してUnityとは別に独自の3D空間を作りそこでどの位置に音が鳴るかを決める。
また、どのListenerから音を鳴らすかも決めている。
Ak Bank
聴く場所を決めたので音が鳴るオブジェクトを用意するが、まず最初にAk Bankというコンポーネントを必ず用いらなければならない。
これはWwise側で作成したSoundBankを読み込むコンポーネントで、
Ak Bankが定義されていない場合、後に紹介するAk Event等で音を再生しようとしても音が見つからないと言われ音声が再生されない。
しかしAk Bankコンポーネントは、同じbankを複数のオブジェクトで読み込む、またシーン越しに同じbankを読み込むとエラーを吐くのでどれか一つのオブジェクトでAk Bankコンポーネントを設定すれば他のオブジェクトに設定する必要はない。
恐らくこの辺りはMainCameraとかに挿すのが適当ではないかと思う
Name:に該当のSoundBankを指定すればOK
Ak Event ~BGM編~
聴く位置、SoundBankを読み込んでやっと音が鳴らせる状態になったので、まずはゲームで必ずといいほど使用するBGMを付ける。
今回のゲーム内BGMはプレイヤーの位置によって音が左右にパンがずれたり距離によって減衰したりしないのでAk Eventを使う。
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のコンポーネントが使われてることが多いと思うのでこれを前提に音を付けていく。
まずボタンのオブジェクトにAk Eventを追加し、BGMの時と同じようにName:に鳴らしたい効果音を選択する。
次にTrigger On:だが今回はどの条件も当てはまらないのでNothingを選択する。
次にButtonコンポーネントを編集する必要がある。
編集といってもC#を描く必要はなく、マウスでぽちぽちすれば出来上がる。
Buttonコンポーネント右下にある「+」マークをクリックし枠を増やす。
OnClick()とはつまりクリックされた際に何が起こるかを入れる場所となっている。
枠を増やした後に該当のボタンをhierarchy(Unity左側)からボタンのオブジェクトをドラックアンドドロップする。
するとグレーアウトしたNo Functionが選択できるようになったと思うので、ここから
AkEvent>AkEvent.HandleEventを選択する
あとはUnityを再生しゲーム画面で該当のボタンをクリックした際に音声が再生されていれば実装完了。
ここまでできると大体の流れが把握できたと思う。
Trigger On:の条件をAkTriggerCollisionEnterにしてやれば当たり判定が発生した際に音声がされるし(ぶつかった時の音等)Destroyにすればオブジェクトが無くなった際に音声が再生されるようになる(破壊音等)
ただしこういった3Dゲーム上での効果音はAkEventではなくAkAmbientというコンポーネントを使ったほうが良いのでそちらを使おう。
※AkAmbientについては二日目に記載します。
まとめ。
流れとしてはdefaultListenerで聴く位置を決め、SoundBankをロードしAkEventで音声を再生する!
注意事項としては同じSoundBankを読み込まないようにすればここまでの知識だけでもUnity上でそれなりに音が鳴るようになったと思いますので、
一日目はここまで!