(:3[kanのメモ帳]

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

(:3[kanのメモ帳]



Unityエディタを再生していない時(エディタ拡張時)に音を鳴らす【Unity】【エディタ拡張】


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




この記事でのバージョン
Unity 2019.4.15f1


はじめに

今回はUnityエディタを再生していない時、

つまりエディタ拡張時に音を鳴らす方法の紹介です!


ちなみにビープ音を鳴らす方法は以前紹介していたりします。

using UnityEditor; //EditorApplicationを使うのに必要
//ビープ音を鳴らす
EditorApplication.Beep();




SoundPlayerを使った方法

まず.netのSoundPlayerという機能で音を鳴らす方法です。

using System.Media;//SoundPlayerを使うのに必要
//SoundPlayer作成
var soundPlayer = new SoundPlayer("Assets/SE.wav");

//音源をロード
soundPlayer.Load();

//再生
soundPlayer.Play();


上記の様に簡単に音を鳴らす事が出来ますが、

wavファイルしか扱えず、Macではファイルに関わらずそもそも使えません。


なお、SoundPlayerを使うには.NET 4.xにする必要があります。

f:id:kan_kikuchi:20201215075142j:plain



リフレクション

次にリフレクションを使った方法です。

リフレクションとは通常アクセス出来ないメンバーやメソッドに無理やりアクセスする方法で、

今回はAudioClipを再生する処理を取得するのに使います。

using UnityEditor; //AssetDatabaseを使うのに必要
using System.Reflection; //BindingFlagsを使うのに必要
//AudioClipをロード(wavファイル以外でもOK)
var audioClip = AssetDatabase.LoadAssetAtPath<AudioClip>("Assets/SE.wav");
  
//リフレクションでAudioClipを再生する処理を取得
var audioUtil = typeof(Editor).Assembly.GetType("UnityEditor.AudioUtil");
var playClipMethod = audioUtil.GetMethod("PlayClip", BindingFlags.Static | BindingFlags.Public);

//AudioClip再生
playClipMethod.Invoke(null, new object[] {audioClip, 0, false});


この方法であればMacでも使えますし、

wavファイル以外でもAudioClipで使える物なら全て扱えます。


参考