読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityエディタの起動時のみスクリプトを実行する

f:id:tsubaki_t1:20150722001745p:plain

先日から作ってる"Unity プロジェクトの中に、要求するアセット群が含まれない場合、該当ファイルのあるアセットを表示する奴ですが、やはりシンプルさを保つには「エディタ起動時にファイルが足りなければダイアログを表示すべき」との結論に至りました。なので、エディタの起動時にダイアログを表示するようにします。

エディタ起動時にのみメソッドを呼ぶ

マニュアルいわく。Unity - マニュアル: 起動時エディタースクリプト実行

さて、これは悪い手です。何故かと言えば、InitializeOnLoadはコンパイルされる度に何度でも呼ばれます。

このコンパイルのタイミングとは、ゲームを再生した時やコンパイル時等、結構色々なタイミングで発生します。

けいごのなんとか • Unityエディタ起動時"のみ"にスクリプト実行のようにEditorApplication.timeSinceStartupで時間を見る方法もあるのですが、これは割と失敗するので余り使いたくはありません。

なので今回は、Tempフォルダ以下に適当なファイルを置き、静的コンストラクタ実行時にファイルが無ければ実行…という形をとりました。

Tempファイルはエディタ終了時・起動時に真っ白になるので、ここにファイルが無ければほぼ初回起動と見なして良いハズです。

コード

とりあえず起動時に1回だけ処理を行って欲しい場合は、下のように書きます。単純にファイルチェックしてるだけの簡単なコードです。

gist.github.com

もし初回起動時に「エディタウィンドウを開きたい」場合は、下のように書きます。普通に呼び出してもウィンドウを表示出来るのですが、Libraryが構成されていないような状態ではウィンドウを即座に表示出来ないので、EditorApplication.delayCallで一瞬待ってあげます。

gist.github.com