オーディオ機能を使用している場合は、Unity 4 から Unity 5 へ移行するときに注意しなければいけない点があります。
AudioClip に関する多くのものが変更されました。1つめはアセットに 3D フラグがなくなります。このフラグは AudioSource の中に移動し、ランタイムで 2D と 3D のモーフィングサウンドを実現する Spatial Blend スライダーに変更になりました。Unity 4 のプロジェクトをアップグレードする際には、AudioSource に設定されていた AudioClip の 3D フラグを使って Spatial Blend に値を設定します。このような理由から、スクリプトから動的に AudioClip を設定している場合は Spatial Blend が設定されないので手動で修正を行う必要があります。
Unity 4 ではデフォルトが 3D 設定でしたが、Unity 5 では 2D 設定がデフォルトになります。
最後に、Unity 5 では AudioClip を複数同時に編集することができるようになりました。
フォーマットを設定するプロパティーがプラットフォームごとに設定の保存ができるようになりました。今後は、非圧縮に関係する生サンプルデータと、圧縮に関係する非可逆圧縮のプラットフォームにもっとも適した方法、多くのノイズ(足音、衝撃、武器、等)を含むもっとも適した自然なオーディオシグナルと大量に再生を可能にする ADPCM に関係した(CPU から言うと)軽量の圧縮方法を選択することができます。
AudioClip の新しい機能として、オーディオデータをプリロードするかどうかを決定するオプションが追加されました。いくつかの AudioClip のプロパティーは実際のオーディオデータのロードプロセスからは切り離されており、いつでもアクセスすることが可能なので、AudioClip のメモリ使用量を低く抑えながら読み込むことが可能です。さらに AudioClip にはメインのゲームスレッドをブロックすることなくバックグラウンドでオーディオデータを読み込むすることでフレーム落ちを防ぎます。読み込みのプロセスはスクリプト API から制御することが可能です。
複数の AudioClip を一度に編集することが可能になりました。
Force To Mono オプションにより、ダウンミックスした結果のピークノーマライゼーションが実行されます。
これらの API コールは、PCM として無圧縮のオーディオデータを保存してあるか、読み込み時に解凍を行うクリップでのみサポートされます。過去にはより多くのクリップがこのサポートを行っていましたが、ターゲットプラットフォームに依存しており、エディターとスタンドアロンプレーヤーで異なる挙動を行うため、パターンがあまり明確ではありませんでした。新しいこととしては、tracker file は PCM データとしてメモリに解凍することもできますので、GetData/SetData はそれらで使用することもできます。
Unity5 でのポーズ処理は Play コールと PlayOneShot コールとで一貫した物になりました。AudioSource のポーズ処理はどちらの方法で再生された音声も一時停止し、Play または PlayOneShot のコール処理はどちらの方法で再生された音声の AudioSource もポーズ解除します。
割り当てられたクリップを Play 処理をしない AudioSource のポーズ解除を補助するために、(これは複数の OneShot 音声が再生されている場合に有用です)、新しい関数 AudioSource.Unpause() を追加しました。
AudioMixer はエフェクトを適用可能なグループをミックスするために AudioSource からのオーディオデータの複雑な処理を可能とする Unity 5 の新しい特色です。AudioFilter コンポーネントごとに異なる一つのキーはオーディオフィルターが AudioSource ごとにインスタンス化されますので、ゲーム内にフィルターのついている AudioSource が数多くある場合や、スクリプトがゲームオブジェクトを含めて数多くのインスタンスをシンプルに作成する場合、CPU の観点から見てよりコストがかかります。Mixer を使用することで、同じエフェクトを持つグループをセットアップし、共有されたエフェクトを通した AudioSource からのオーディオをシンプルに処理することで CPU 使用方法をより安価に抑えることができます。
Mixer はスクリプトベースのエフェクトをサポートしていませんが、デベロッパーが他のビルトインエフェクトとシームレスに統合する、高いパフォーマンスのエフェクトを書けるようにする、新しいネイティブオーディオプラグイン API があります。
オーディオシステムの設定方法を変更しました。Speaker Mode と DSP Buffer Size 全体の設定は以前と変わらず Audio Project Setting で設定でき、これらに加えて Real / Virtual Voice Count も設定できるようになりました。Real Voice Count は同時にいくつの音声を聞くことができるかを指定しますので、ゲームの CPU 消費全体に大きな影響があります。以前、これはいくつかのプラットフォームを例外として、32bit にハードコードされていました。再生中の音声がこの数字を上回った場合、それらの音声がほかのものより優先されるか、他の優先されている音声が停止されるまでは保留された上で聞こえるようになります。これらの音声はシンプルに再生を迂回しているのです。それらは停止されず、シンプルに再度帯域幅に存在するまでは非アクティブにされます。Virtual Voice Count は全体でいくつの音声を管理するかを定義しますので、音声の数がこの値を越えた場合、最低でも聞こえる音声は停止します。
AudioSettings.outputSampleRate と AudioSettings.speakerMode は依然として読み取りに使用することができますが、SetDSPBufferSize 関数のように set アクセサーはお勧めできなくなりました。実行時に起こす必要のあるオーディオ設定変更のためにこれらの代替として AudioConfiguration という構造体があります。これは、オーディオ出力デバイスで有効な設定を返す AudioSettings.GetConfiguration() 経由で得られます。変更はこの構造体に行うことができ、変更の適用が成功、失敗しそうかによって boolean 型を返す AudioSettings.Reset() 経由で適用することができます。
AudioSettings.Reset() を経由したスクリプトや、オーディオサポートのある HDMI モニター、外部サウンドカードや USB ヘッドセットに差し込むなどの外部イベントのどちらかによっていつオーディオ設定の変更が起こっても、ユーザー定義のコールバックである AudioSettings.OnAudioConfigurationChanged(bool deviceChanged) が実行されます。この引数である deviceChanged は、AudioSettings.Reset() の呼び出しによる変更であった場合 false になり、外部デバイスの変更によるものであれば true になります(これは使用しているオーディオデバイスのサンプルレートを変更する可能性もあります)。コールバックを使用することで、生成される PCM クリップのような変動しやすい音声を再生成したり、どんなオーディオの状態も保存したり、AudioSettings.Reset() を呼び出すことでオーディオ設定を適合することさえできます。