using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
///项目数据配置
public class ProjectDataEditor : EditorWindow
{
[MenuItem("Tools/Framework/项目数据配置")]
public static void ShowVoice()
{
ProjectDataEditor window = EditorWindow.GetWindow("项目数据配置");
window.Show();
}
///宏元素
private class MacroItem
{
///宏名称
public string Name;
///窗口上显示的名称
public string DisplayName;
///是否发布
public bool isRelease;
///默认宏
public bool isDefault;
}
///所有宏
private List macroitems = new List();
///Macro
private string Macro = null;
private void OnEnable()
{
#if UNITY_ANDROID
Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android);
#else
Macro = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
#endif
List macros = Macro.Split(';').ToList();
macroitems.Clear();
macroitems.Add(
new MacroItem()
{
Name = "DEBUG_MODEL",
DisplayName = "调试模式",
isRelease = false
}
);
macroitems.Add(
new MacroItem()
{
Name = "DEBUG_LOG",
DisplayName = "记录日志",
isRelease = false
}
);
macroitems.Add(
new MacroItem()
{
Name = "MODE_TEST",
DisplayName = "测试模式",
isRelease = false
}
);
macroitems.Add(
new MacroItem()
{
Name = "COLLECT_DATA",
DisplayName = "收集数据",
isRelease = false
}
);
//macroitems.Add(
// new MacroItem()
// {
// Name = "PLATFORM_STEAMVR",
// DisplayName = "SteamVR平台",
// isRelease = false
// }
//);
macroitems.Add(
new MacroItem()
{
Name = "PLATFORM_PC",
DisplayName = "PC平台",
isRelease = false
}
);
macroitems.Add(
new MacroItem()
{
Name = "PLATFORM_PHONE",
DisplayName = "手机平台",
isRelease = false
}
);
macroitems.Add(
new MacroItem()
{
Name = "PLATFORM_PICO",
DisplayName = "Pico平台",
isRelease = false
}
);
for (int i = 0; i < macros.Count; i++)
{
if (!macroitems.Exists(s => s.Name == macros[i]))
{
if (!string.IsNullOrEmpty(macros[i]))
macroitems.Add(
new MacroItem()
{
Name = macros[i],
DisplayName = "其它",
isRelease = false,
isDefault = true
}
);
}
}
for (int i = 0; i < macroitems.Count; i++)
{
if (macros.Exists(s => s == macroitems[i].Name))
macroitems[i].isRelease = true;
}
}
private void OnGUI()
{
EditorGUILayout.BeginHorizontal("box");
GUILayout.Label("");
GUILayout.Label("环境配置", GUILayout.Width(55));
GUILayout.Label("");
EditorGUILayout.EndHorizontal();
for (int i = 0; i < macroitems.Count; i++)
{
EditorGUILayout.BeginHorizontal();
GUILayout.Label("名称:", GUILayout.Width(30));
GUILayout.Label(macroitems[i].DisplayName, GUILayout.Width(100));
GUILayout.Label("宏 :", GUILayout.Width(30));
EditorGUILayout.TextField(macroitems[i].Name);
GUILayout.Label("是否开启:", GUILayout.Width(60));
if (macroitems[i].isDefault)
EditorGUILayout.Toggle(macroitems[i].isRelease, GUILayout.Width(15));
else
macroitems[i].isRelease = EditorGUILayout.Toggle(
macroitems[i].isRelease,
GUILayout.Width(15)
);
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.BeginHorizontal();
GUILayout.Label("");
if (GUILayout.Button("保存", GUILayout.Width(100)))
{
Macro = string.Empty;
for (int i = 0; i < macroitems.Count; i++)
{
if (macroitems[i].isRelease)
{
Macro += $"{macroitems[i].Name};";
}
}
#if UNITY_ANDROID
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android, Macro);
#else
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, Macro);
#endif
SetObfuscator();
AssetDatabase.Refresh();
}
EditorGUILayout.EndHorizontal();
}
///设置混淆
private void SetObfuscator()
{
//bool exis = macroitems.Exists(m => m.Name == "DEBUG_MODEL" && m.isRelease);
//Options options = OptionsManager.LoadOptions();
//if (options.enabled == exis)
//{
// options.enabled = !exis;
// EditorUtility.SetDirty(options);
// AssetDatabase.SaveAssets();
//}
}
}