【Unity】エディタ拡張で音楽をながす方法
EditorWindowを作成してその中で音を出したい!
コンポーネントを作るんじゃなく、直接呼び出したい!
調べました!
AudioUtility
既につよいスクリプトを作っている人がいたので、これを利用して実装します。
このAudioUtility内のメソッドを使ってAulidclipを呼び出します。
https://forum.unity.com/threads/reflected-audioutil-class-for-making-audio-based-editor-extensions.308133/
このAudioUtilityの中でも、PlayClipというメソッドをピックアップして何をしているのかを見てみます。
PlayClip()
using System; using System.Reflection; using UnityEngine; namespace UnityEditor { public static class AudioUtility { public static void PlayClip(AudioClip clip , int startSample , bool loop) { Assembly unityEditorAssembly = typeof(AudioImporter).Assembly; Type audioUtilClass = unityEditorAssembly.GetType("UnityEditor.AudioUtil"); MethodInfo method = audioUtilClass.GetMethod( "PlayClip", BindingFlags.Static | BindingFlags.Public, null, new System.Type[] { typeof(AudioClip), typeof(Int32), typeof(Boolean) }, null ); method.Invoke( null, new object[] { clip, startSample, loop } ); } } }
ここでは、AudioUtilクラスをリフレクションしています。
PlayClipメソッドを呼び出して音を鳴らします。
リフレクションについては、以下のページも是非みてください!
tofgame.hatenablog.com
実際に音楽をかける
新しいウィンドウを開いた時にメソッドを呼び出すようにエディタ拡張をします。
using UnityEditor; using UnityEngine; public class EditorWindow : EditorWindow { private static AudioClip audioClip; [MenuItem("music/tst")] public static void Open () { var window = CreateInstance<EditorWindow>(); window.Show(); audioClip = Resources.Load<AudioClip>("bgm1"); AudioUtility.PlayClip(audioClip,0,true); //ここで呼び出し!! } private void OnDisable () { AudioUtility.StopClip(audioClip); } }
複数ウィンドウを作るとその分だけ音楽がながれます。
おわりに
作業中に音楽をならすミュージックプレイヤーウィンドウとかも作れそうですね!