Unity Audio について
Unity 6 以降でゲームのオーディオシステムを構築する開発者向けの実装スキルです。オブジェクトプール式の効果音、音楽の切り替え、3D オーディオ、ミキサー、プロファイリングを扱い、ScriptableObjects とイベント駆動パターンを用います。
主な機能
- 01効果音のオブジェクトプールを構築
- 02楽曲間のクロスフェード
- 033D オーディオと環境音の設定
- 04AudioMixer スナップショットの設定
- 05Audio Random Containers の利用
- 06音声数とメモリのプロファイリング
活用シーン
- 01Unity ゲームに再利用可能な効果音を追加
- 02シーンや状態に応じた音楽の切り替え
- 03トリガーゾーンによる空間環境音の設定
- 04音声数やメモリの問題を調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ juliankerignard/ unity-skills --skill unity-audioインストール後、Claude Code で/unity-audioを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/audio-patterns.mdaudio-advanced.mdaudio-optimization.md詳細
Unity Audio
このスキルでできること
Unity 6+ で完全なオーディオシステムを設計、実装する方法を説明します。プーリングを使った SFX、クロスフェード付きの音楽、環境音、3D 空間化、Audio Random Containers(Unity 6+)、AudioMixer スナップショットを扱い、Scriptable Audio Pipeline(Unity 6.3+)を紹介します。ScriptableObjects とイベント駆動型パターンに基づく、パフォーマンスに優れたコードを作成します。
前提条件
- Unity 6.0+(Scriptable Audio Pipeline には 6.3+)
- デフォルトの Audio パッケージ(組み込み)
- AudioSource、AudioClip、AudioMixer の基本的な知識
/unityスキルの読み込み(アーキテクチャ、パターン SO)
クイックスタート
- 要件を説明する:音の種類(SFX、音楽、環境音)、状況(2D/3D/VR)
- 判断ツリーに従って、適切なパターンを選択する
- AudioManager を作成する:ScriptableObject と SoundEmitter プールに基づいて構築する
- インポート設定を構成する:オーディオの種類に応じて設定する(
references/audio-optimization.mdを参照) - テストする:Audio Profiler を使い、AudioMixer で音量を調整する
判断ツリー
Type de son ?
|
+-- SFX ponctuel (tir, saut, UI click) ?
| +-- Peu de variations --> AudioSource.PlayOneShot + pool
| +-- Variations (footsteps, impacts) --> Audio Random Container (Unity 6+)
|
+-- Musique (BGM, themes) ?
| +-- Un seul theme --> AudioSource loop
| +-- Transitions entre themes --> Crossfade 2 sources
| +-- Musique dynamique --> AudioMixer snapshots
|
+-- Ambiance (vent, foule, pluie) ?
| +-- Globale --> AudioSource loop sur Camera/Manager
| +-- Locale (zone) --> AudioSource 3D + trigger zone
|
+-- Son spatial 3D ?
| +-- Standard --> spatialBlend = 1, Logarithmic rolloff
| +-- VR/AR --> Spatializer plugin (Steam Audio, Resonance)
|
+-- Custom DSP / synthese ?
+-- Unity 6.3+ --> Scriptable Audio Pipeline
手順ガイド
ステップ 1:既存の AudioMixer を検出する
プロジェクトに AudioMixer があるか確認します。ない場合は、次のグループを作成します:
- Master(全体音量)
- SFX(効果音)
- Music(音楽)
- Ambiance(環境音)
- UI(インターフェース音)
各グループの音量パラメーター(SFXVolume、MusicVolume など)を公開します。
ステップ 2:AudioManager SO をセットアップする
ScriptableObjects に基づくシステムを作成します:
AudioCueSO:クリップ、音量/ピッチの範囲、対象のミキサーグループを含みますAudioCueEventChannelSO:再生要求を疎結合にするイベントチャネルですAudioManagerMonoBehaviour:チャネルをリッスンし、SoundEmitter プールを管理します
完全な実装(AudioCueSO、SoundEmitter、プール、クロスフェード)については、references/audio-patterns.md を参照してください。
ステップ 3:インポート設定を構成する
各オーディオクリップに、種類に応じた最適な設定を適用します:
- 短い SFX:Decompress On Load、Vorbis 70%、Force Mono
- 音楽:Streaming、Vorbis 50%、Stereo
- 環境音:Streaming、Vorbis 50%、Force Mono
- UI:Decompress On Load、PCM、Force Mono
完全な表については、references/audio-optimization.md を参照してください。
ステップ 4:パターンを実装する
判断ツリーに従って、次のパターンを実装します:
- SFX:自動返却機能付きの SoundEmitter プール
- 音楽:
Awaitableを使った 2 つの AudioSources 間のクロスフェード - 環境音:トリガーゾーン付きの 3D AudioSource
- 空間化:ロールオフ、最小/最大距離、ドップラーを設定する
- AudioMixer スナップショット:環境の切り替え(Combat、Pause、Underwater)
Mixer スナップショット、3D 空間化、Audio Random Container のパターンについては、references/audio-advanced.md を参照してください。
ステップ 5:テストとプロファイリングを行う
- Window > Analysis > Audio Profiler を開く
- アクティブなボイス数を確認する(目安:モバイルは 32、デスクトップは 64)
- Profiler の Memory > Audio タブでオーディオメモリを確認する
- AudioMixer スナップショットの遷移をテストする
- シーン内で Audio Gizmos を使って 3D 空間化を検証する
厳守事項
必ず行うこと:
- 単発の効果音には
PlayOneShot()を使用します(Play()は使用しません) - SoundEmitters のプールを使用します(サウンドごとに
Instantiateしません) AudioMixer.SetFloat()で音量を公開します(AudioSource.volumeを直接使用しません)- ゲーム内でクリップを使用する前に、インポート設定を行います
- ルーティングのため、すべての AudioSource に
AudioMixerGroupを設定します - 音量を dB に変換します:
Mathf.Log10(value) * 20f - カテゴリごとに同時再生できるボイス数を制限します(最大ボイス数)
絶対に行わないこと:
new AudioClip()を使用したり、毎フレームクリップを読み込んだりしないでください- 高速で重ねて再生する効果音に
AudioSource.Play()を使用しないでください - 再生後にエミッターをプールへ戻し忘れないでください
- 500 Ko を超えるファイルで AudioSource を
Decompress On Loadのままにしないでください - オーディオ用 GameObject に
Destroy()を使用しないでください(プール経由で再利用してください) spatialBlendを無視しないでください(デフォルトは 0 = 2D なので、3D では見落としやすい設定です)
関連スキル
/unity-code-gen:AudioManager、SoundEmitter、AudioCueSO のコードを生成します/proto:プレースホルダーのオーディオを使って素早くプロトタイプを作成します/perf-audit:オーディオのアンチパターン(メモリ、ボイス)を検出します/unity-test:EditMode でオーディオシステムをテストします
トラブルシューティング
| 問題 | 考えられる原因 | 解決策 |
|---|---|---|
| 音が再生されない | AudioSource が無効、または音量が 0 | enabled、volume、AudioMixerGroup がミュートされていないか確認します |
| 3D サウンドが聞こえない | spatialBlend = 0(2D モード) | spatialBlend = 1 に設定し、maxDistance を確認します |
| クリップ冒頭でクリック音やポップ音がする | クリップのトリミング不良、または解凍 | 無音部分をトリミングし、クリップにフェードインを設定します |
| モバイルで効果音に遅延がある | 短い効果音に Streaming を使用している | 1 秒未満のクリップには Decompress On Load を使用します |
| オーディオのメモリ使用量が急増する | すべてのクリップが Decompress On Load になっている | 音楽や環境音には Streaming を使用し、圧縮します |
| クロスフェードが急激に変化する | 遷移曲線がない | Mathf.SmoothStep または対数曲線を使用します |
| AudioMixer.SetFloat が失敗する | パラメーターが公開されていない | Inspector でパラメーターを右クリックし、Expose を選択します |
| 同じサウンドが繰り返されて単調になる | ピッチや音量に変化がない | Audio Random Container を使用するか、手動でランダム化します |