
マイケル
みなさんこんにちは!
マイケルです!

エレキベア
こんにちクマ〜〜

マイケル
今日からしばらくUnityでのサウンド周りの実装について取り上げていきます!
後々CRIやWwise等のサウンドミドルウェアを触ってみようと思いますが、その前にUnity標準で搭載されているUnityAudioでどのようなことが出来るのか?をまとめていこうと思います!

エレキベア
サウンドミドルウェアは一定規模のゲーム開発ではほとんど採用されているクマね
でも確かにUnityAudioについても知らないことが多そうクマ

マイケル
調べながら改めて触ってみると、サウンドエフェクトやオーディオスペクトラムの描画も実装できて、想像以上にいろんなことが出来るなと思いました。
基本的なサウンド再生でしか触っていない方も多いと思うので、これを機にいろいろ触ってみると面白いと思います!

【Unity】第一回 UnityAudioを使いこなす 〜サウンド再生処理編〜
2024-01-22

【Unity】第二回 UnityAudioを使いこなす 〜AudioMixer活用編〜
2024-01-22

【Unity】第三回 UnityAudioを使いこなす 〜オーディオスペクトラム描画編〜
2024-01-22
参考書籍

マイケル
学習するにあたり、下記書籍を参考にさせていただきました!


マイケル
Unityでのサウンド処理をまとめた数少ない書籍です!
発売日からそれなりに経過していますが、UnityAudioだけでなくCRIと連携した使い方まで解説されているため、興味を持った方はぜひ一読してみてください!

エレキベア
サウンド専門となると書籍は中々ないクマから持っておく価値はありそうクマね
UnityAudioの構成要素

マイケル
UnityのAudio機能については公式マニュアルにまとまっていますが、大きく下記のような構成になっています。
機能名 | 概要 |
---|---|
AudioClip | ・サウンドのアセット形式 |
AudioSource | ・AudioClipの再生処理を行うためのコンポーネント |
AudioListener | ・ゲーム内空間の耳にあたるコンポーネント |
AudioMixer | ・AudioSourceが鳴らしている音を分類し調整やエフェクト処理を行う機能 |

エレキベア
AudioClipやAudioSourceはよく使うクマが、それ以外はあまり聞き覚えがないクマね

マイケル
各機能はそれぞれ下記のようになっています。
AudioClip

マイケル
AudioClipは Unityでオーディオファイルを扱う形式 です。
こちらはUnityにインポートした際に自動的にこの形式に変換されます。

共通設定
項目名 | 概要 |
---|---|
Force To Mono | モノラル音源へ変換するか |
Load In Background | メモリへロードする際、非同期読み込みを行うか |
Ambisonic | VR向けの設定 |
プラットフォーム別設定
項目名 | 概要 |
---|---|
LoadType | 読み込み方法 ※後述 |
Preload Audio Data | シーンロード時にサウンドデータをメモリに読み込むか |
Compression Format | 圧縮設定 |
LoadTypeの種類
項目名 | 概要 | 効果 |
---|---|---|
Decompress On Load | デコード処理を全て行ってからメモリに配置する | CPU負荷:小 メモリ容量:大 |
Compressed In Memory | 圧縮データを展開せずにメモリに読み込み、再生時に展開する | CPU負荷:中 メモリ容量:中 |
Streaming | 圧縮データをメモリに置かず、再生時に随時ストレージから読み込む | CPU負荷:大 メモリ容量:小 |

マイケル
音源の種類や用途によって設定を変えることで最適化することができます。
具体例として、BGMとSEで設定を分ける例は下記になります。
BGMの設定例
容量が大きいため Load In Background で非同期読み込みを行い、
Compressed In Memory で再生時に展開する。

SEの設定例
再生速度を優先するため Force To Mono でモノラルに設定し、
Preload Audio Data、Decompress On Load で事前に読み込み、デコード処理を行う。


エレキベア
CPU負荷やメモリ容量を考慮しながら、再生速度と品質どちらを優先すべきかで設定しているクマね
AudioSource

マイケル
AudioSourceは AudioClipの再生処理を行うためのコンポーネント です。

Unityスクリプトリファレンス - AudioSource

マイケル
AudioClip項目にclipを設定することで再生することができます。
その他、ボリュームやピッチ調整等の再生時の設定が主な役割ですが、こちらは後ほど触ってみましょう。

エレキベア
AudioClipをAudioSourceで再生する・・・
ここまでは分かったクマね
AudioListener

マイケル
AudioListenerは ゲーム内空間の耳にあたるコンポーネント で、ゲーム中に一つしか存在しません。
こちらのを介してゲーム全体の音の再生、停止等を行えます。

▲MainCameraにデフォルトで付いている
Unityスクリプトリファレンス - AudioListener

エレキベア
MainCameraに設定されてるの気付かなかったクマ・・・
AudioMixer

マイケル
AudioMixerは AudioSourceが鳴らしている音を分類し調整やエフェクト処理を行う機能 です。
こちらは設定手順等が複雑なので、詳細は次回解説します!


エレキベア
これはあまり触ってない人も多そうクマね
プロジェクト全体のサウンド設定

マイケル
最後に、ゲーム全体のサウンド設定は
Edit > Project Settings > Audio
から変更することができます。
全体のボリューム設定や最大同時再生数などの項目があります。

Unityスクリプトリファレンス - AudioSettings

エレキベア
まあ基本はデフォルトでよさそうクマね
オーディオの再生処理を実装する

マイケル
それでは早速オーディオの再生処理を実装してみます。
今回作ったサンプルプロジェクトは下記のGitHubリポジトリとして上げていますので、こちらもよければご参照ください!

▲サンプルプロジェクト内で今回解説する範囲の機能
サウンドの再生処理

マイケル
サウンド関連の処理については、基本的に UnityAudioServiceクラス内にまとめてあります。

マイケル
まず使用するAudioClipの読込処理は下記になります。
サンプルということで今回はResources配下から読み込むようにしています。
▲AudioClipの読み込み

マイケル
そして読み込んだAudioClipをAudioSourceに設定するのですが、
今回は下記のようにオブジェクトにAddComponentする形で生成しました。
BGM用で二つ生成しているのは、この後紹介するクロスフェード処理で同時再生する時に必要になるためです。
▲AudioSourceの生成

マイケル
あとは生成したAudioSourceに対して、Play関数 や PlayOneShot関数 を呼び出すことで再生することができます。
今回は別途Optionクラスも用意し、ボリュームやピッチ調整も行えるようにしました。
▲BGM、SEの再生処理
▲指定できるオプション

マイケル
これでオーディオファイル名とオプションを指定して関数呼び出しすることで再生できるようになっているはずです。

エレキベア
ここまでは簡単クマ〜〜〜
フェードイン、フェードアウト

マイケル
次は少し凝って、再生・停止を行う際に音量をフェードさせるようにしてみます。
今回はUnity標準機能のみで実装するためにコルーチンを使用しましたが、MonoBehaviourが必要になるため可能であればUniTaskを使用して実装した方がいいと思います。
▲再生・停止時のフェード処理

マイケル
あとはこの関数に対してフェードさせる時間を渡すようにすれば完了です。
今回は線形補間で変化させましたが、より自然に見せたい場合にはイージング関数等を用いるとよいと思います。

エレキベア
あとは処理の連打防止なんかも考えないといけなそうクマね
オブジェクトからSEを鳴らす

マイケル
最後に、オブジェクト自身の位置を考慮したSE再生について紹介します。

マイケル
AudioSourceは位置情報も反映するため、遠くから鳴らすと音が小さく、近くで鳴らすと音が大きくなるといった3D再生が可能になっています。
この位置情報を有効にするためには、オブジェクトにアタッチしたAudioSourceに対して spatialBlend(通常再生と3D再生のブレンド具合) の値を0以上にする必要があります。
▲オブジェクト側のAudioSourceのspatialBlend値を設定する

マイケル
あとは設定したAudioSourceを渡す形で再生すれば、位置情報が反映された状態で再生されるはずです。
▲AudioSourceを渡して再生する

マイケル
サンプルではランダムに動き回るオブジェクトから再生する機能を用意していますので、よければ確認してみてください!

▲「Start3DSE」ボタン押下で確認できます。

エレキベア
(見覚えのあるロボットクマ・・・)

マイケル
ちなみにアニメーションによってSEを再生したい場合には、下記のようにアニメーションイベントを設定して呼び出すことでモーションに応じた再生が可能です。
こちらも組み込んでありますので、興味のある方はご参照ください!

▲アニメーションイベントの設定

▲設定したアニメーションイベント
▲アニメーションイベントから呼び出す関数

エレキベア
これで基本的なサウンドの再生周りはマスターしたクマね
おわりに

マイケル
というわけで今回はUnityAudioによる再生周りの処理についてでした!
どうだったかな??

エレキベア
改めてみるとなんとなく使ってた機能も多かったクマ
でもやっぱりサウンドがあると楽しいクマね

マイケル
次回は更に踏み込んで、AudioMixerを使用した設定画面やエフェクト適用周りを試してみます!
お楽しみに!!

エレキベア
楽しみクマ〜〜〜〜〜
【Unity】第一回 UnityAudioを使いこなす 〜サウンド再生処理編〜 〜完〜

【Unity】第一回 UnityAudioを使いこなす 〜サウンド再生処理編〜
2024-01-22

【Unity】第二回 UnityAudioを使いこなす 〜AudioMixer活用編〜
2024-01-22

【Unity】第三回 UnityAudioを使いこなす 〜オーディオスペクトラム描画編〜
2024-01-22