ball 项目提交
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
[InitializeOnLoad]
|
||||
public static class IAPDefineSymbolAdder
|
||||
{
|
||||
private const string SYMBOL_IAP = "UNITY_IAP";
|
||||
private const string SYMBOL_PURCHASING = "UNITY_PURCHASING";
|
||||
|
||||
static IAPDefineSymbolAdder()
|
||||
{
|
||||
CheckAndUpdateSymbols();
|
||||
}
|
||||
|
||||
[MenuItem("Tools/IAP/检查并更新宏")]
|
||||
public static void CheckAndUpdateSymbols()
|
||||
{
|
||||
bool iapInstalled = IsIAPInstalled();
|
||||
|
||||
foreach (BuildTargetGroup group in new[] { BuildTargetGroup.Android, BuildTargetGroup.iOS })
|
||||
{
|
||||
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(group);
|
||||
var symbols = defines.Split(';').Where(s => !string.IsNullOrEmpty(s)).ToList();
|
||||
|
||||
if (iapInstalled)
|
||||
{
|
||||
// 需要宏但宏不存在 → 添加
|
||||
bool changed = false;
|
||||
if (!symbols.Contains(SYMBOL_IAP)) { symbols.Add(SYMBOL_IAP); changed = true; }
|
||||
if (!symbols.Contains(SYMBOL_PURCHASING)) { symbols.Add(SYMBOL_PURCHASING); changed = true; }
|
||||
|
||||
if (changed)
|
||||
{
|
||||
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", symbols));
|
||||
Debug.Log($"[IAP] 检测到 IAP 已安装,已为 {group} 添加宏。");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 不需要宏但宏存在 → 移除
|
||||
bool changed = symbols.Remove(SYMBOL_IAP) || symbols.Remove(SYMBOL_PURCHASING);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
PlayerSettings.SetScriptingDefineSymbolsForGroup(group, string.Join(";", symbols));
|
||||
Debug.Log($"[IAP] 检测到 IAP 未安装,已为 {group} 移除宏。");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsIAPInstalled()
|
||||
{
|
||||
if (TypeExists("UnityEngine.Purchasing.Product"))
|
||||
return true;
|
||||
|
||||
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
|
||||
if (assemblies.Any(a => a.GetName().Name.Contains("UnityEngine.Purchasing")))
|
||||
return true;
|
||||
|
||||
try
|
||||
{
|
||||
Assembly.Load("UnityEngine.Purchasing");
|
||||
return true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool TypeExists(string typeName)
|
||||
{
|
||||
try
|
||||
{
|
||||
return AppDomain.CurrentDomain.GetAssemblies()
|
||||
.SelectMany(assembly =>
|
||||
{
|
||||
try { return assembly.GetTypes(); }
|
||||
catch (ReflectionTypeLoadException e) { return e.Types.Where(t => t != null); }
|
||||
})
|
||||
.Any(t => t.FullName == typeName);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user