Cockatiel技術ブログ

株式会社ピュアサウンドのオーディオソリューション。いろいろ音を鳴らしています。

Unity

Unityのエディタ拡張『CTAudioPreviewer』をリリースしました

投稿日:

昨日4/16、Unityアセットストアにてエディタ拡張『CTAudioPreviewer』をリリースしました。

CTAudioPreviewer – Asset Store

CTAudioPreviewer – Cockatiel Official Site※Cockatielサイト内紹介ページ

弊社のUnityアセットとしては『RETRO SOUND EFFECTS』に続く二作目となりますが、今回は方向性をガラリと変えてエディタ拡張となります。
どういうものかというと、DAWのメディアブラウザのようにキーボードだけでプレビューをしていける補助ツールです。


キーボードでカカカッとオーディオファイルをプレビューして、気に入ったものが見つかったらそのままインスペクターに放り込む……というように作業の高速化をお手伝いします。
よろしければお買い求めくださいね。

実装や失敗談など

機能としては以下の実装を目指しました。

  • リスト形式の表示
  • 矢印キーの上下でリストを移動、スペースキーでオーディオクリップ再生
  • フォルダの選択
  • 音量の変更
  • (できればリストからドラッグ&ドロップ)

再生関連はAudioSourceを使う、音量の変更はSliderを使う、このあたりはイメージできるのですが、リスト関連やフォルダ選択、さらにドラッグ&ドロップに関しては何とも……という状況でした。

リスト表示

最初はSelectionGridをリストみたいな見た目にして使っていました。
上下移動はキーボード入力を別にとって連動させて、選択項目がはみ出たら自前で位置を修正して……とやっていたのですが、完成間際に調べてみたらTreeViewなんて便利なものがあるじゃないですか……

ツリービュー – Unity マニュアル

初期の理解は大変でしたが、今回は複雑な階層構成するわけでもなし、その上理想とするUIも備えている!ということで速攻で乗り換えました。
SelectionGrid実装はムダになってしまいましたが、結果的には正しい判断でしたね。

フォルダ選択

最初はResourcesクラスを使っていましたが、フォルダ名に制限がかかるのはいかがなものかと考え、結局はSystem.IO.Directoryを使って自前でパスを何とかしました。
WindowsとMacでパス区切り文字が異なるのは要注意です。
(気づかずリリースしていたら大変なことに……)

ドラッグ&ドロップ

DragAndDrop.pathsとDragAndDrop.objectReferences両方(片方でもOK?)を設定して、DragAndDrop.StartDrag()を開始すればドラッグができる模様。
今回はドロップ受け取り処理を標準エディタ側に任せてしまうため、特にこちらで何かすることはないです。

ドロップ処理を自前実装する場合は、上記パスとオブジェクトを参照して、DragAndDrop.AcceptDrag()で受け入れれば良いらしい。

開発の経緯

実験や検証など、様々な理由でちょこちょことUnityを触る機会があるのですが、AudioClip選択ウインドウの操作は何とかならんのかと常日頃考えていました。
いちいちマウスをいろんなところに動かすのではなく、DAWみたいにキーボードでササッと操作できないものかと。

そこでエディタ拡張のことを調べていたのですが、そこまで複雑なものでなければなんとかできそう、また最近はXamarinでC#の知見も多少得ていたということもありチャレンジしてみることとなりました。

あとは、我々のように困っている開発者が他にもいるはずだ!という謎の思い込み(笑)もモチベーション要因になっています。

なお開発に際して、下記エディタ拡張入門は大変参考にさせていただきました。

Unityエディタ拡張入門

おわりに

Unityエディタ拡張、かなり奥が深いです。
Unity公式が「エディタ拡張の深層」と表現してしまうくらい深いです。

とはいえ、基本はGUIの組み合わせで如何様にも作れますし、ちょっと足りない機能を補っていくくらいの感じで始めてもよいのかな、と感じました。
そしてズブズブと沼に……

そんなこんなで作られた『CTAudioPreviewer』は、アセットストアにて$10で発売中です。

CTAudioPreviewer – Asset Store

みなさまの開発のお役に立てば幸いです。

-Unity
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

16 − 11 =

関連記事

関連記事はありませんでした