(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

Audio Clipの設定を(プラットフォーム毎に)プログラムから行う【Unity】【エディタ拡張】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 2017.2.0f3


はじめに

Audio Clipは各設定値を確認する事は可能ですが変更する事は出来ません(getterしかない)

f:id:kan_kikuchi:20180208085619j:plain

AudioClip bgm = Resources.Load<AudioClip>("BGM");

bool loadInBackground = bgm.loadInBackground; //OK
bgm.loadInBackground = true; //エラー


今回はこれをプログラムから変更しようという記事です!

なお、一部の値はプラットフォームごとに設定する事も出来ます。


AudioImporter

Audio Clipの設定をプログラムから行う時はAudioImporter(using UnityEditor;が必要)を使います。

実際にやってみると以下のような感じになります。

//Assets直下にあるBGM.oggというファイルの対象にAudioImporterを作成
string path = "Assets/BGM.ogg"; //拡張子も必要
AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter;

//loadInBackgroundを変更
audioImporter.loadInBackground = true;


ただし、Audio Clipの下部にあるプラットフォームごとに設定を行う部分に関しては

AudioImporterSampleSettingsを使って設定を行います。


f:id:kan_kikuchi:20180208090759j:plain


実際にDefaultの設定を変更してみると以下のような感じになります。

//Assets直下にあるBGM.oggというファイルの対象にAudioImporterを作成
string path = "Assets/BGM.ogg"; //拡張子も必要
AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter;

//DefaultのAudioImporterSampleSettings取得
AudioImporterSampleSettings settings = audioImporter.defaultSampleSettings;

//loadTypeを変更し、設定し直す
settings.loadType = AudioClipLoadType.Streaming;
audioImporter.defaultSampleSettings = settings;


また、特定のプラットフォームの設定を変更してみると以下のような感じになります。

//Assets直下にあるBGM.oggというファイルの対象にAudioImporterを作成
string path = "Assets/BGM.ogg"; //拡張子も必要
AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter;

//設定するプラットフォーム名を取得(今回はAndroid)
string platformName = RuntimePlatform.Android.ToString();

//AndroidのAudioImporterSampleSettingsを取得
AudioImporterSampleSettings settings = audioImporter.GetOverrideSampleSettings(platformName);

//loadTypeを変更し、設定し直す
settings.loadType = AudioClipLoadType.DecompressOnLoad;
audioImporter.SetOverrideSampleSettings(platformName, settings);


なお、アセットのインポート時に設定したい場合はAssetPostprocessorを使いましょう。



また、アセットのパスを知りたい場合はGetAssetPathが使えます。