ブログ

Unity でプリプロセッサディレクティブ(条件付きコンパイル)を使う方法

背景

  • プロジェクト全体で使える #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";
}

使用方法

  1. 任意のデバッグコードを #if DEVELOP ~ #endif で囲う
  2. Release版を確認する際は、Editorメニューから Release を選択
  3. VisualStudio を閉じて、Editor にて何らかのスクリプトをダブルクリックで VisualStudio を起動
    1. 閉じる際に sln ファイルの保存を聞かれるが、「保存しない」
    2. VisualStudio を再起動することで、#if DEVELOP で囲われた部分がグレーアウトされる

Unity_Menu

備考

  • プロジェクト名が 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」をスクリプト実行したかった(が、見つからなかった)

-ブログ

© 2022 墾田ええねん! Powered by AFFINGER5