背景
- プロジェクト全体で使える #if ~ #endif (シンボル、マクロ)が欲しい
- Scripting Define Symbols は面倒なので使いたくない
- Unityマニュアル の「グローバルのカスタム #defines」を使いたい
- 最低限の機能のみでよい(アセットストアのものは多機能すぎる)
コード例
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」をスクリプト実行したかった(が、見つからなかった)