anz blog

UnityのエディタでPlayしたらiTunesは止めるぞ

どうも他人のネタでブログ書くマン、再びの登場です(笑)
今朝いつものようにTLをみてたら、「おぉ〜確かに。あったらあったで便利だな〜」と思った次第で...
やりたさがウズウズしだし...やっちゃう!みたいな

UnityエディタでPlayしたらiTunesは止めたい...

です!

環境

  • Unity v2017.2

やりたいこと

Unityをやっていれば、絶対にお世話になる人トップなんちゃらには間違いなくランクインしてくる...
Kan.Kikuchi先生がつぶやいていたのです。
たしかになーーと。音入れだしたら、ここらへん自動的にできたら楽ですよね〜〜と。
(僕みたいにしょっぼいものしか作ってないと、テキトーにあてこんだ後はエディタの設定でMuteAudioとかしちゃうけどw)

調べる

エディタ拡張でエディタのPlay/Pauseが取れるのはわかっているので、
問題となるのは、なんらかの方法でiTunesを制御することができるのか? というところですね。

ぐぐると、osascriptを使うとできそうというのがわかりました。
全然知らなかった...osascript...
なんか、AppleScript(これもしらん、なんぞw)を実行するためのコマンドらしいのです。
で、これをどう使うかというと...

$ osascript -e 'tell app "iTunes" to play'

これをターミナルなんかでたたくと、再生されるのです!(すげー
で、もう少しここらを中心にググると、やっぱりありました。
osascriptを使ってiTunesをコントロールする的なのを書いてくれている方が。

圧倒的感謝!🙏

実装

もうここまできたら、あとはそれぞれを組み合わて実装するだけですね。
Unityエディタ拡張で、play/pauseを検知して...このitunes.shを叩くと...
という流れで実装して、unitypackage化しました!

僕の環境では動いています!(笑)

iTunesController

こんな感じに...切り替わります!💪

初期化問題

Unityエディタ拡張やってればあるあるなのかもですけど...
なんかUnity起動時に1回だけ!とかっていう初期化できないのん...
ビルドが終わるタイミングとかでもじゃんじゃか初期化されちゃうので
内部でフラグを持ちたかったのだけれど、値を保持できなくって...
結局ScriptableObjectにわざわざ保持するということになりました。

なんかもっとお手軽な方法があるっていうのであれば教えて欲しいです。

参考

エディター拡張入門
Unity - Scripting API: AssetDatabase
(:3[kanのメモ帳]