【Unityエディタ拡張】音楽プレイヤーを作る

初めまして!プログラマの近藤です。
最近Unityを触りはじめ、エディタ拡張について勉強しています。
今回はそのエディタ拡張機能を使って、エディタ上で音楽を聴く「Audio再生機」を作ってみました。その紹介をしていこうと思います。

待って!そもそもUnityのエディタ拡張って??

Unityは標準で搭載されている機能の他にユーザーが機能を追加していくことができます。
それを総称して「エディタ拡張」と呼びます。自分はそう呼んでいます。
追加できる機能が多く、全てを紹介出来ない(分かってない)ので、
今回使用した機能を説明します。

新規ウィンドウの追加
ヒエラルキーやインスペクターなど標準搭載のウィンドウの他に新しくウィンドウを作成できます。

各種入力領域の追加

ボタンや文字列、チェックボックス、スライダーからカラーパレットまで、
あったらいいなって入力項目を追加できます。
これは新規で作成したウィンドウ内にもできますし、既存のウィンドウにも追加可能です。

他にも文字の色を真っ赤にしたり、アイコンの見た目を好きな画像にしたり、
本当にたくさん追加可能な機能があります。

これがやっていて楽しい。とても楽しい。
ゲーム制作もそうなのですが、制作してすぐ反映されるものはやっていて楽しいですね!

本題に戻って

色々できるエディタ拡張の中で今回は「音楽を再生する」ということに焦点をあてて
音楽データ(AudioClip)を再生する「Audio再生機」を作ってみました。

完成品お披露目

こんな感じになりました!!ザ・シンプル!

Resources/Audioフォルダ内のAudioClipを一覧に表示して
選択したAudioClipを再生します。
いくつかボタンがありますが、一般的な音楽再生ソフトと大体同じ機能なはず、です多分。
最後にコード全部載せますので、
それをResources/Editorフォルダに入れるとそのまま使用することができます。

ウィンドウ起動時

Resouces/Audio内のAudioClipをすべてリストに格納します。
自分の持ってた音源が.m4aだったのですが
UnityにImportできずmp3に変換してImportしました。

https://docs.unity3d.com/ja/current/Manual/AudioFiles.html
.m4aはサポートされていないんですね、残念。

再生用オブジェクト生成

ウィンドウ起動時に再生用のAudioというオブジェクトを生成して、
そのオブジェクトにAudioSourceコンポーネントを追加しています。このオブジェクトを使って音楽を再生させます。

何も設定を行わないと生成した再生用のオブジェクトがヒエラルキーに表示されてしまうので
HideFlags.HideAndDontSaveというフラグを設定しておくとSceneに保存されませんし表示もされなくなります。
今回のような裏で動いてほしい場合にはうってつけの設定でした。さすユニ。

生成したらちゃんと削除もする

当たり前だろって言われそうですが、自分は完全に忘れてました。
HideFlags.HideAndDontSaveを設定したオブジェクトは
ヒエラルキーに表示されないので、忘れがちになります。自分は完全に忘れてました。

オブジェクトの削除にはDestroyでは無く、DestroyImmediateを使用します。
OnGUI()内でDestroyを使用するとエラーが出て正常に削除できないです。

再生ボタンを押して再生する

GUILayout.Toggleは、ボタンを押すともう一度押すまでtrueなので
再生ボタンのような押しっぱなしがいい場合に重宝します。
さらに指定スキンをボタンにすること他のボタンとの統一感が出て視認性UP!

GUI.skinには画像を設定できるのでテキストで頑張って|>とかせずに画像を用意したほうがいいと思います。
フォントサイズの調整も必要なくなるので。

UIを右寄せに表示したい

勝手なこだわりだったんですが、音量調整のスライダーは右寄せにしたかったんです。
GUILayout.FlexibleSpace()を使用してそれっぽく見せています。

(画像見づらいです、申し訳ありません。)
GUILayout.ExpandWidth(true)
を使用して、描画領域の最大まで確保した状態で
GUILayout.FlexibleSpace()を使うと右寄せに表示することができました。

困ったこと

Unityエディタを選択していないと再生されない
音楽プレイヤーを名乗りたいのならば非表示時にも再生していて欲しいところ。
デフォルトの設定だとエディタ選択中以外は動かないようになっているらしく、
Build Settingsから動くように変更する必要があるようです。

  • File/Build Settingsからビルド設定画面を開き、Player Settingsのボタンを押す。
  • インスペクターの設定項目「Run In BackGround」にチェックをつける。

この設定をしておくと、Unityエディタのウィンドウを選択していなくても動作します。

完成!

あとはボタン押したら次の曲にしたり、ボリューム調整できるようにしたりと
好きな機能、というか最低限必要な機能を入れていって
「Audio再生機」の完成です!

以下、コード全文 Resources/Editorフォルダに入れると使用できます。

終わり

ちゃんと音楽を再生できるものが出来ました。
ただ音楽プレイヤーとして機能不足が目立ちます。いまどきシャッフルとリピートのない音楽プレイヤーとかないですからね。これから追加していけたらなと思います。

Unityの音楽データは基本オブジェクトに追加して実行しないと音が再生されないので、
実行せずに手軽に確認したいときに役に立つかなぁと思ったりしています。

長々とお付き合い頂きありがとうございました!

おまけ

音楽聞きながらだと作業捗る系プログラマな自分ですが、実は
可愛い画像を見ると作業捗る系プログラマでもあるんですね。
やはり作業効率あげるなら可愛い画像の表示は必須。ということで用意しました。
こんな感じ

© Unity Technologies Japan/UCL

いつか次の記事を書く機会があればこの機能について書こうかなと思います。