強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Unity で定数を使う方法と注意すべき点

Unity で定数を使う方法はこちらのけいごさんのブログで紹介されている様な方法が有ります。

けいごのなんとか • Defineをプラットフォーム別に行いたい 今まで(私が知っているやり方です) ...
http://anchan828.tumblr.com/post/32669868103/define

大体は全てこの記事に書かれているのでこちらの記事をみて頂ければOKなのですが1点使う場合に注意すべき点が有ります。

Unity 4.0 以前でも使える gmcs.rsp や smcs.rsp を使って定数を定義する場合、この定数が使われるのはもちろんビルドのタイミングになります。

その為、例えばあるファイルで以下の様に DEBUG という定数が定義済みで有るかどうかで処理を分けていたとします。

#if DEBUG
  showInfo();
#endif

最初はデバッグ用に情報を表示する為に gmcs.rsp や smcs.rsp などに定数 DEBUG を定義しておいてデバッグ情報を出力します。

作業が進んでもうデバッグ情報が必要なかったので gmcs.rsp や smcs.rsp などに定義していた DEBUG を削除します。

これでもうデバッグ情報が出力されなくなったらバッチリなんのですが実際にはその様にはなりません。

定数が使用されるのはあくまでファイルがビルドされた瞬間です。 Unity の場合は「ファイルに変更が発生 → その後、 Unity のエディタにフォーカスが戻ってきた」という瞬間にビルドが行われます。

「 gmcs.rsp や smcs.rsp に変更が有ったからそこで定義されている定数を使っているファイルは再ビルドが行われる」なんて仕組みだと大変嬉しいのですが実際にはその様な仕組みには成っていません。その為、 gmcs.rsp や smcs.rsp に変更が有った場合に実際に反映されるのは定数を使用しているファイルに変更が有った後になります。

この様な仕組みに成っていますが定数を使用しているファイル全部を gmcs.rsp や smcs.rsp に変更が発生したタイミングで編集し直すは現実的では有りません。

そこで実際にはその様な処理を行なってくれるエディタ拡張を使います。

ここではUnityのライブラリを沢山リリースされている prime31 が無料で公開されている以下のファイルを使う事にします。導入方法はこのファイル1つだけをプロジェクトに追加すればOKです。

P31UnityAddOns/Editor/GlobalDefinesWizard.cs at master · prime31/P31UnityAddOns
https://github.com/prime31/P31UnityAddOns/blob/master/Editor/GlobalDefinesWizard.cs

使い方

ファイルは( GlobalDefinesWizard.cs )は Editor フォルダに保存します。

保存するとメニューが追加されるので Global Defines → Edit Global Defines と選択します。

表示されたウィンドウに「定数を追加」→「横のチェックを付ける」→「 Save ボタンを押す」という作業をすると gmcs.rsp と smcs.rsp に定数が定義された状態で Assets フォルダに生成されます。チェックを付け無いと定数が定義されませんので注意して下さい。

このエディタ拡張では Save ボタンを押した瞬間に再ビルドが行なわれる様な処理が行われています。

その為、追加や編集、削除した定数が即座に反映された状態になります。

関連情報

Unity - マニュアル: プラットフォーム依存コンパイル
http://docs.unity3d.com/ja/current/Manual/PlatformDependentCompilation.html