Unity プラットフォームごとにシンボルを定義する

SymbolScriptable.cs

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

public class SymbolScriptable : ScriptableObject
{
  [System.SerializableAttribute]
  public class Param
  {
    public string define;
    public SymbolTarget[] target;
  }
  public List<Param> list = new List<Param>();


  [MenuItem("Tools/Create Symbol Asset")]
  static void CreateExampleAssetInstance()
  {
    var path = "Assets/Editor/Symbol.asset";
    // 1つだけあればよいので存在する場合は生成しない
    if (File.Exists(path)) { return; }
    var asset = CreateInstance<SymbolScriptable>();
    AssetDatabase.CreateAsset(asset, path);
    // デフォルト設定
    asset.list.Add(new Param { define = "HOGE", target = new [] { SymbolTarget.Standalone } });
    AssetDatabase.Refresh();
  }

  public enum SymbolTarget
  {
    Standalone,
    iOS,
    Android,
    Switch,
  };
  private static readonly Dictionary<BuildTargetGroup, SymbolTarget> mapping = new Dictionary<BuildTargetGroup, SymbolTarget>()
  {
    { BuildTargetGroup.Standalone,  SymbolTarget.Standalone },
    { BuildTargetGroup.iOS,         SymbolTarget.iOS },
    { BuildTargetGroup.Android,     SymbolTarget.Android },
    { BuildTargetGroup.Switch,      SymbolTarget.Switch },
  };

  public void saveDefine()
  {
    var dic = new Dictionary<BuildTargetGroup, string[]>();
    foreach (var key in mapping.Keys) {
      dic[key] = list
        .Where(x => x.target.Any(t => t == mapping[key]))
        .Select(x => x.define).ToArray();
    }
    foreach (var key in dic.Keys) {
      PlayerSettings.SetScriptingDefineSymbolsForGroup(key, string.Join(";", dic[key]));
    }
  }
}

SymbolScriptableInspector.cs

using UnityEngine;
using UnityEditor;
using System.IO;
using System.Linq;

[CustomEditor(typeof(SymbolScriptable), true)]
public class SymbolScriptableInspector : Editor
{
  public override void OnInspectorGUI()
  {
    SymbolScriptable obj = target as SymbolScriptable;

    DrawDefaultInspector();

    if (GUILayout.Button("Save", GUILayout.Width(50f))) {
      obj.saveDefine();
    }
  }
}

[Tools] > [Create Symbol Asset]でアセット生成。

生成したアセットのSaveを押すと保存されます。