mcpField
U
Unity Audio

Unity Audio

github.com/juliankerignard開発852 回インストール31 週間前に更新
リポジトリ

Unity Audio について

Unity 6 以降でゲームのオーディオシステムを構築する開発者向けの実装スキルです。オブジェクトプール式の効果音、音楽の切り替え、3D オーディオ、ミキサー、プロファイリングを扱い、ScriptableObjects とイベント駆動パターンを用います。

主な機能

  1. 01効果音のオブジェクトプールを構築
  2. 02楽曲間のクロスフェード
  3. 033D オーディオと環境音の設定
  4. 04AudioMixer スナップショットの設定
  5. 05Audio Random Containers の利用
  6. 06音声数とメモリのプロファイリング

活用シーン

  1. 01Unity ゲームに再利用可能な効果音を追加
  2. 02シーンや状態に応じた音楽の切り替え
  3. 03トリガーゾーンによる空間環境音の設定
  4. 04音声数やメモリの問題を調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/juliankerignard/unity-skills --skill unity-audio

インストール後、Claude Code で/unity-audioを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
audio-patterns.md
audio-advanced.md
audio-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)

クイックスタート

  1. 要件を説明する:音の種類(SFX、音楽、環境音)、状況(2D/3D/VR)
  2. 判断ツリーに従って、適切なパターンを選択する
  3. AudioManager を作成する:ScriptableObject と SoundEmitter プールに基づいて構築する
  4. インポート設定を構成する:オーディオの種類に応じて設定する(references/audio-optimization.md を参照)
  5. テストする: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:再生要求を疎結合にするイベントチャネルです
  • AudioManager MonoBehaviour:チャネルをリッスンし、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 が無効、または音量が 0enabled、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 を使用するか、手動でランダム化します

コメント