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を押すと保存されます。