音ファイルをUnityにインポートしたときの自動設定エディタ拡張

音ファイル自動設定エディタ拡張_アイキャッチ

Unity で音周りの品質やメモリ、遅延をいい感じに整えるには、インポート設定が超重要。でも手で毎回いじるのは地味にしんどい……。

そこで本記事では、音声ファイルをプロジェクトに入れた瞬間に、用途に合わせて最適設定が自動で入るエディタ拡張を作ります。BGM/SE の判定、ロード方式、圧縮方式、サンプルレート最適化、iOS/Android のプラットフォーム別設定など個人でカスタマイズして使いやすくしていきましょう。

目次

おすすめのインポート設定

種類LoadType
BGMStreaming
SEDecompressOnLoad

Streamingは遅延に弱いのでSEには不向き。
DecompressOnLoadは再生は速いけどRAM使用量が増える点に注意。

ソースコード内容

using System.IO;
using UnityEditor;
using UnityEngine;

public class AudioImportSettings : AssetPostprocessor
{
    void OnPreprocessAudio()
    {
        var importer = assetImporter as AudioImporter;
        string fileName = Path.GetFileName(assetPath).ToLower(); // ファイル名のみ

        // 例: BGM 用にフォルダ判定
        if (fileName.StartsWith("bgm_"))
        {
            importer.forceToMono = false;
            //importer.loadInBackground = true;
            importer.loadInBackground = false;

            AudioImporterSampleSettings settings = importer.defaultSampleSettings;
            settings.loadType = AudioClipLoadType.Streaming;
            settings.compressionFormat = AudioCompressionFormat.Vorbis;
            settings.quality = 0.7f;
            settings.preloadAudioData = false;
            importer.defaultSampleSettings = settings;

            Debug.Log($"[BGM設定] {assetPath}");
        }
        // 例: 効果音用
        else if (fileName.StartsWith("se_"))
        {
            importer.forceToMono = true;
            importer.loadInBackground = false;

            AudioImporterSampleSettings settings = importer.defaultSampleSettings;
            settings.loadType = AudioClipLoadType.DecompressOnLoad;
            settings.compressionFormat = AudioCompressionFormat.ADPCM;
            settings.quality = 1f;
            settings.preloadAudioData = true;
            importer.defaultSampleSettings = settings;

            Debug.Log($"[SE設定] {assetPath}");
        }
    }
}

配置したら、Assets/Editor/(または任意のEditorフォルダ配下)に入れてください。

判定ルールを自分の運用に合わせて変える

  • フォルダ運用派
    Assets/Audio/BGM/, Assets/Audio/SE/, Assets/Audio/Voice/ のように分けるのが管理楽。
    pathLower.Contains("/bgm/") などの条件を追加。
  • ファイル名運用派
    battle_boss_bgm, coin_se などサフィックスで判断。
    EndsWith("_bgm.wav")Contains("_se.") を拡張。

自分が普段、作業している方法によって使い分けるのがいいと思います。

インポート設定内容に関しては、if文で判定している中で自分が使いやすいように設定してみるといいと思います。インポートするたびに手動で設定していると設定し忘れなどがあってこのような状況を防止できるのでおすすめです。

チームで規約化しておくと、誰が追加しても自動で最適化されて事故が減ります。

まとめ

  • 音のインポート設定は品質・メモリ・遅延の要
  • ルール化+自動化でブレをなくすと、チーム開発が劇的に楽になる。
  • 本記事のスクリプトを土台に、プロジェクトの事情に合わせて設定内容をカスタムしていきましょう。
よかったらシェアしてね!
目次