using UnityEngine;
///
/// 平台工厂类,用于创建对应平台的实现
///
public static class PlatformFactory
{
private static IPlatformService _currentPlatform;
private static PlatformType? _forcedPlatformType;
///
/// 获取当前平台实例
///
public static IPlatformService GetCurrent()
{
if (_currentPlatform == null)
{
_currentPlatform = CreatePlatform();
}
return _currentPlatform;
}
///
/// 强制指定平台类型(用于测试)
///
public static void ForcePlatform(PlatformType platformType)
{
_forcedPlatformType = platformType;
_currentPlatform = null; // 重置当前平台
}
///
/// 创建平台实例
///
private static IPlatformService CreatePlatform()
{
PlatformType platformType = DetectPlatformType();
switch (platformType)
{
case PlatformType.WeChat:
Debug.Log("[PlatformFactory] 创建微信小游戏平台实例");
return new WeChatPlatform();
case PlatformType.Douyin:
Debug.Log("[PlatformFactory] 创建抖音小游戏平台实例");
return new DouyinPlatform();
case PlatformType.Vivo:
Debug.Log("[PlatformFactory] 创建vivo小游戏平台实例");
return new VivoPlatform();
case PlatformType.Standalone:
default:
Debug.Log("[PlatformFactory] 创建编辑器测试平台实例");
return new StandalonePlatform();
}
}
///
/// 检测当前平台类型
///
private static PlatformType DetectPlatformType()
{
// 如果强制指定了平台类型,使用强制类型
if (_forcedPlatformType.HasValue)
{
Debug.Log($"[PlatformFactory] 使用强制指定的平台类型: {_forcedPlatformType.Value}");
return _forcedPlatformType.Value;
}
#if UNITY_EDITOR
// Unity 编辑器环境
return PlatformType.Standalone;
#elif UNITY_WEBGL
// WebGL 平台,需要通过 JavaScript 检测具体平台
// TODO: 通过 Application.ExternalEval 检测微信、抖音等平台
// 暂时默认返回微信
return PlatformType.WeChat;
#else
// 其他平台默认为 Standalone
return PlatformType.Standalone;
#endif
}
}