背景
- プロジェクト全体で使える #if ~ #endif (シンボル、マクロ)が欲しい
- Scripting Define Symbols は面倒なので使いたくない
- Unityマニュアル の「グローバルのカスタム #defines」を使いたい
- 最低限の機能のみでよい(アセットストアのものは多機能すぎる)
コード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | using UnityEditor; public class EditorMyAppMenu { [MenuItem(cMenu_BuildTarget_Develop)] private static void OnBuildTarget_Develop() { // チェックマークを付ける Menu.SetChecked(cMenu_BuildTarget_Develop, true ); Menu.SetChecked(cMenu_BuildTarget_Release, false ); // slnファイルを削除 deleteSln(); // rspファイルを上書き保存 createRsp( "-define:DEVELOP" ); } [MenuItem(cMenu_BuildTarget_Release)] private static void OnBuildTarget_Release() { // チェックマークを付ける Menu.SetChecked(cMenu_BuildTarget_Develop, false ); Menu.SetChecked(cMenu_BuildTarget_Release, true ); // slnファイルを削除 deleteSln(); // rspファイルを上書き保存 createRsp( "" ); } private static void deleteSln() { System.IO.FileInfo fileInfo = new System.IO.FileInfo( "MyApp.sln" ); fileInfo.Delete(); } private static void createRsp( string text) { System.IO.StreamWriter sw = new System.IO.StreamWriter( "Assets/csc.rsp" , false ); sw.WriteLine(text); sw.Flush(); sw.Close(); } private const string cMenu_BuildTarget_Develop = "MyApp/Build Target/Develop" ; private const string cMenu_BuildTarget_Release = "MyApp/Build Target/Release" ; } |
使用方法
- 任意のデバッグコードを #if DEVELOP ~ #endif で囲う
- Release版を確認する際は、Editorメニューから Release を選択
- VisualStudio を閉じて、Editor にて何らかのスクリプトをダブルクリックで VisualStudio を起動
- 閉じる際に sln ファイルの保存を聞かれるが、「保存しない」
- VisualStudio を再起動することで、#if DEVELOP で囲われた部分がグレーアウトされる
備考
- プロジェクト名が MyApp という場合のコード例
- csc.rsp に -define:DEVELOP と記述すると #if DEVELOP が使えるようになる
- 生成された csc.rsp はgit管理しないようにする
- 直近の Develop, Release の確認に依存するローカルファイルなので
- ちなみに、slnファイルもgit管理しない(参考ページ)
- slnファイルを削除すると、VisualStudio 再起動時に slnファイル と csproj ファイル が自動生成されることを利用している
- VisualStudio 起動状態で、更新されたcsc.rsp を参照しつつ csproj を生成する方法があればそれでもよい(が、見つからなかった)
- 本当は、Editor の Asset を右クリックの「Open C# Project」、または Preferences の「Regenerate project files」をスクリプト実行したかった(が、見つからなかった)