スマゲ

スマートなゲームづくりを目指して日々精進

Unityのエディタ拡張を利用して開発環境の切り替えを行う

Unityのエディタ拡張とシンボル定義を利用して開発環境の切り替えを簡単に行えるようにします

■関連
Unityで条件付きコンパイルを行う - スマゲ
Unityのエディタ拡張でPlayerPrefsを削除する - スマゲ

■切り替え方法
1. シンボル定義を行い、開発環境と、本番環境の設定の書き分けを行う
2. エディタ拡張を使ってプラットフォームに定義されているシンボルを書き換える

■シンボル定義を行い、開発環境と、本番環境の設定の書き分けを行う
定数を保存するConstantsクラスを作成して、必要な定数を記述する

public static class Constants {
#if RELEASE
    public const string Environment = "本番環境";
    public const string Host = "honban.domain.come";
    public const bool IsDevelop = false;
#elif DEVELOP
    public const string Environment = "開発環境";
    public const string Host = "kaihatsu.domain.come";
    public const bool IsDevelop = true;
#endif
}

■エディタ拡張を使ってプラットフォームに定義されているシンボルを書き換える
ChangeEnvironment.csを作成してAssets/Editor以下に配置する

using UnityEngine;
using UnityEditor;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

public class ChangeEnvironment {

    // 開発環境に切り替え
    [MenuItem("Environment/Develop")]
    static void Develop(){
        var symbols = GetSymbols();
        symbols.Add("DEVELOP");
        symbols.Remove("RELEASE");
        SetSymbols(symbols);
    }

    // 本番環境に切り替え
    [MenuItem("Environment/Release")]
    static void Release(){
        var symbols = GetSymbols();
        symbols.Add("RELEASE");
        symbols.Remove("DEVELOP");
        SetSymbols(symbols);
    }

    // 設定されているシンボル定義を取得する
    static List<string> GetSymbols(){
        return PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup).Split(';').ToList();
    }

    // シンボル定義をセットする
    static void SetSymbols(List<string> symbols){
        var symbolStr = string.Empty;
        symbols.ForEach(s => symbolStr += s + ";");
        PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, symbolStr);
    }
}

■実行
[Menu] -> [Environment] から利用したい環境を選択する
f:id:sanukin39:20160630232600p:plain

シンボル定義に追加され、選択した環境の定数を読み込むことができる
f:id:sanukin39:20160630232831p:plain

Debug.Log(Constants.Host);

f:id:sanukin39:20160630233318p:plain

■まとめ
スクリプトを毎回開いて編集することなく、環境の切り替えを行うことができた。

■追記 2016/07/03
この記事の内容を応用したビルドわけのサンプルを作成しました。
smartgames.hatenablog.com